#!/usr/bin/python3
import subprocess
import json
import argparse


CONFIG_SOURCE = "/srv/datalogger_ecom/config_ecom.json"

def update_config(config, model):
    try:
        #ESCRIBIR JSON
        config["GPS_SENSOR"]["MODEL"] = model
        with open(CONFIG_SOURCE,'w') as archivo:
            json.dump(config, archivo, indent=len(config))
    except:
        print("No se pudo sobreescribir el json")


def config_gps():
    print('Configuracion de GPS\n')
    try:
        config_file=open(CONFIG_SOURCE,'r')
        config=json.load(config_file)
        gps_model = config["GPS_SENSOR"]["MODEL"]
        print(f"GPS configurado: {gps_model}\n")

        while True:
            sel=input("Desea Salir (Q), Consultar (C), Modificar (M) la configuracion GPS?: ")
            try:
                if sel=='C' or sel=='c':
                    print(f"GPS configurado: {gps_model}")

                elif sel=='M' or sel=='m':
                    print("Seleccione gps que desea configurar:")
                    print("1- GPS_USB")
                    print("2- GPS_MASTER")
                    sel_gps=input("Ingrese la opcion 1 o 2: ")
                    if sel_gps =="1":
                        gps_model = "GPS_USB"
                        update_config(config, gps_model)
                        out0 = subprocess.check_output(['sh','/srv/datalogger_ecom/gps/install.sh'])
                        out1 = subprocess.check_output(['systemctl','restart','mining-serial.service'])
                        print("GPS USB Configurado")
                        
                    elif sel_gps =="2":
                        gps_model = "GPS_MASTER"
                        update_config(config, gps_model)
                        out0 = subprocess.check_output(['sh','/srv/datalogger_ecom/gps/uninstall.sh'])
                        out1 = subprocess.check_output(['systemctl','restart','mining-serial.service'])
                        print("GPS MASTER Configurado")

                    else:
                        print("Ingrese un valor valido")

                    update_config(config, gps_model)

                elif sel=="Q" or sel=="q":
                    break

                else:
                    print("Ingrese un valor valido")

            except Exception as ex:
                print(ex)
                print("Ingrese un valor valido")

    except:
        print("No existe archivo config_ecom.json")


def autodetect_gps():
    try:
        usb_gps = ["1546:01a7","1546:01a8"]
        out_usb = subprocess.check_output('lsusb')
        lines=out_usb.decode().split("\n")
        for ID in usb_gps:
            for linea in lines:
                if ID in linea: 
                    print(f"  - Encontre GPS USB: ")
                    config_file=open(CONFIG_SOURCE,'r')
                    config=json.load(config_file)
                    gps_model = "GPS_USB"
                    update_config(config, gps_model)
                    out0 = subprocess.check_output(['sh','/srv/datalogger_ecom/gps/install.sh'])
                    out1 = subprocess.check_output(['systemctl','restart','mining-serial.service'])
                    print("GPS USB Configurado")
                    return
            
        print("No se encontró GPS USB")


    except Exception as ex:
        print(ex)
    

# Lógica principal para manejar argumentos de línea de comandos
if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Command GPS.")
    parser.add_argument('-dGPS', '--autodetect_gps', default=False, help='Autodetecta GPS Model', type=bool)
    args = parser.parse_args()

    if args.autodetect_gps:
        print("Autodetect GPS Model")
        autodetect_gps()
    else:
        print("Configuración manual de GPS")
        config_gps()