#!/usr/bin/env python3
import os
import argparse
import sys
#from datetime import datetime
import glob
import shutil
#import subprocess
#import time

# Expecting files of the format BX992_____202312200600.T04
def move_daily(
    folder,
    ext='*T04',
):
    daily_list = []
    flist = sorted(glob.glob(ext, root_dir=folder))
    for f in flist:
        #print(f, f.split("_")
        date = f.split("_")[-1]
        #daily = date[4:8]    # mmdd
        prefix = f.split("_")[0]
        if prefix == 'BLDG2BD':
           prefix = 'Z3R'
        daily = os.path.join(date[2:8] + '_remote_310mm', 'data', 'gnss', prefix)     # yymmdd
        #print(f"{f=} {date=} {daily=}")
        #if daily not in daily_list:
        #    daily_list.append(daily)
        daily_dir = os.path.join(folder, daily)
        os.makedirs(daily_dir, exist_ok=True)
        print(f"move {f} to {daily}")
        #os.rename(
        #    os.path.join(folder, f),
        #    os.path.join(folder, daily, f)
        #)

    #c_file = os.path.join(folder, "comments.txt")
    #if os.path.isfile(c_file):
    #    for d in daily_list:
    #        if not os.path.isfile(os.path.join(folder, d, "comments.txt")):
    #            print(f"Copying comments.txt to {d}")
    #            shutil.copy(
    #                c_file,
    #                os.path.join(folder, d, "comments.txt")
    #                )

def move_by_device(
    folder,
    ext='*T04',
):
    dev_list = []
    flist = sorted(glob.glob(ext, root_dir=folder))
    for f in flist:
        dev = f.split("_")[0]
        if dev not in dev_list:
            dev_list.append(dev)
        dev_dir = os.path.join(folder, dev)
        os.makedirs(dev_dir, exist_ok=True)
        print(f"move {f} to {dev}")
        os.rename(
            os.path.join(folder, f),
            os.path.join(folder, dev, f)
        )



# Main
# ----------------------------------------------------
def main():
    #total_start_time = datetime.now()

    parser = argparse.ArgumentParser(
        description='Move files with names like BX992_____202312200600.T04 '
        'to daily folders with names like 231222/. If a comments.txt file '
        'exists in FOLDER, then copy it to eacy of daily folders, but do not '
        'overwrite any existing comment.txt files in the dail folders. T04 '
        'files will overwrite files in the daily folders.',
        formatter_class=argparse.ArgumentDefaultsHelpFormatter
        )
    parser.add_argument('-v', '--Verbose', action='count', default=0)
    parser.add_argument(
        "-F", "--folder",
        type=str,
        default=".",
        help="TODO"
        )
    parser.add_argument(
        '-d', '--by-device',
        action="store_true",
        help="group files by device name only"
        )

    args = parser.parse_args()


    if args.by_device:
        move_by_device(args.folder)
    else:
        move_daily(args.folder)


if __name__ == '__main__':
    main()
