import glob
import shutil
import os
import time
import argparse
import sys

# Collect:

# (1) Logs generated by srscu, srsdu and open5gs:
# \\192.168.0.*\smbd_home\logs\Logs\*.log

# (2) Counts generated by log-main-parser.py:
# \\192.168.0.*\smbd_home\projects\srs-log\count*.txt

# (3) Logs generated by log-main-parser.py:
# \\192.168.0.*\smbd_home\projects\srs-log\log*.txt

# Usage:

# python log-parser-collect.py -h
# python log-parser-collect.py -m 192 194 195 -c
# python log-parser-collect.py -m 192 194 195 -c=yes
# python log-parser-collect.py -m 192 194 195 -d=yes

parser = argparse.ArgumentParser(description='log-parser-collect')
parser.add_argument('-c', '--collect', help='Collect files', required=False, nargs='?', choices=['yes', 'no'], const="yes", default="no")
parser.add_argument('-d', '--delete', help='Delete files', required=False, choices=['yes', 'no'], default="no")
parser.add_argument('-m', '--machines', nargs='+', help='Machines to process: 192, 193, 194, 195, 198', required=True)

args = vars(parser.parse_args())

if len(sys.argv) == 1:
    parser.print_help(sys.stderr)
    sys.exit()

proc_machines = args['machines']
col_files = args['collect'] == "yes"
del_files = args['delete'] == "yes"

if col_files and del_files:
    print("ERROR: 'delete' and 'collect' modes can't be selected simultaneously")
    sys.exit()

machines = ["192.168.0." + i for i in proc_machines]

print("===============================================")
print("Machines to process: ")
print("===============================================")
print("")
print(', '.join(machines))
print("")

time_str = time.strftime("%Y%m%d_%H%M%S", time.localtime())

coll_base = ".\\-Collect-\\" + time_str + "\\"

if col_files:
    os.mkdir(coll_base)
    proc_mode = ["COPY", "Copying"]
elif del_files:
    proc_mode = ["DELETE", "Deleting"]
else:
    parser.print_help(sys.stderr)
    sys.exit()  

print("===============================================")
print(proc_mode[0] + " srsran 5G + Open5GS logs and result files:")
print("===============================================")
print("")

if col_files:
    print("Saving to: " + coll_base)
    print("")

print("(1) Logs generated by srscu, srsdu and Open5GS:")
print("    \\smbd_home\\logs\\Logs\\*.log")
print("")

print("(2) Counts generated by log-main-parser.py:")
print("    \\smbd_home\\logs\\local-Counts\\count*.txt")
print("")

print("(3) Logs generated by log-main-parser.py:")
print("    \\smbd_home\\projects\\srs-log\\log*.txt")
print("")

if col_files:
    print("(4) srsRAN configuration files:")
    print("    \\smbd_home\\config\\srsran-5G\\*.yml")
    print("")

    print("(5) Open5GS configuration files:")
    print("    \\smbd_home\\config\\open5gs\\*.yaml")
    print("")

print(proc_mode[1] + " files from machines:")
for m in machines:
    print("- " + m)
print("")

for i, m in enumerate(machines):
    
    print("================================")
    print("Machine: " + m)
    print("================================")
    print("")
    
    coll_m = coll_base + m
    
    if col_files:
        os.mkdir(coll_m)
    
    loc_base = r"\\" + m + r"\smbd_home" + "\\"
    
    print("Base path: "  + loc_base)

    loc_srsran_log_5gs = os.path.join(loc_base, "logs", "Logs")
    loc_parser_log_cnt = os.path.join(loc_base, "logs", "local-Counts")
    loc_parser_log_par = os.path.join(loc_base, "projects", "srs-log")
    loc_parser_cfg_srs = os.path.join(loc_base, "config", "srsran-5G")
    loc_parser_cfg_o5g = os.path.join(loc_base, "config", "open5gs")
    
    files_srsran_log_5gs = glob.glob('*.log', root_dir=loc_srsran_log_5gs)
    files_parser_log_cnt = glob.glob('count*.txt', root_dir=loc_parser_log_cnt)
    files_parser_log_par = glob.glob('log*.txt', root_dir=loc_parser_log_par)
    files_parser_cfg_srs_yml = glob.glob('*.yml', root_dir=loc_parser_cfg_srs)
    files_parser_cfg_srs_log = glob.glob('*.log', root_dir=loc_parser_cfg_srs)
    files_parser_cfg_o5g_yaml = glob.glob('*.yaml', root_dir=loc_parser_cfg_o5g)

    print("(1) Logs generated by srscu, srsdu and open5gs:")
    for f in files_srsran_log_5gs:
        s = loc_srsran_log_5gs + "\\"  + f
        print("- " + f + " ...")
        if col_files:
            shutil.copyfile(s, coll_m + "\\" + f)
        else:
            try:
                os.remove(s)
            except PermissionError:
                print("ERROR: permission error. Delete the file manually.")            
        
    print("(2) Counts generated by log-main-parser.py:")
    for f in files_parser_log_cnt:
        s = loc_parser_log_cnt + "\\"  + f
        print("- " + f + " ...")
        if col_files:
            shutil.copyfile(s, coll_m + "\\"  + f)
        else:
            try:
                os.remove(s)
            except PermissionError:
                print("ERROR: permission error. Delete the file manually.")
        
    print("(3) logs generated by log-main-parser.py:")
    for f in files_parser_log_par:
        s = loc_parser_log_par + "\\"  + f
        print("- " + f + " ...")
        if col_files:
            shutil.copyfile(s, coll_m + "\\"  + f)
        else:
            try:
                os.remove(s)
            except PermissionError:
                print("ERROR: permission error. Delete the file manually.")

    print("(4) logs generated by launch.sh:")
    for f in files_parser_cfg_srs_log:
        s = loc_parser_cfg_srs + "\\"  + f
        print("- " + f + " ...")
        if col_files:
            shutil.copyfile(s, coll_m + "\\"  + f)
        else:
            try:
                os.remove(s)
            except PermissionError:
                print("ERROR: permission error. Delete the file manually.")
                
    if col_files:
        print("(5) srsRAN configuration files:")
        for f in files_parser_cfg_srs_yml:
            s = loc_parser_cfg_srs + "\\"  + f
            print("- " + f + " ...")
            shutil.copyfile(s, coll_m + "\\" + f)

        print("(6) Open5GS configuration files:")
        for f in files_parser_cfg_o5g_yaml:
            s = loc_parser_cfg_o5g + "\\"  + f
            print("- " + f + " ...")
            shutil.copyfile(s, coll_m + "\\" + f)

    print("")