#!/usr/bin/python3
import subprocess


def systemctl_status(service_name):
    try:
        result = subprocess.check_output(
            ["systemctl", "status", service_name],
            stderr=subprocess.STDOUT)
        stdout = result.decode()
    except Exception as exc:
        stdout = exc.output.decode()

    for line in stdout.split("\n"):
        if "could not be found" in line:
            return False
    return True

def get_ups():
    list_ups = []
    if systemctl_status("juice4halt.service"):
        list_ups.append("Juice4halt")
    if systemctl_status("mining-ups.service"):
        list_ups.append("Mcuzone")
    
    return list_ups


def comando(orden,modo=1):
    orden_s=orden.split(' ')
    if modo==1:
        res=subprocess.check_output(orden_s)
        if res.decode()!='\n' or res.decode()!='':
            print(res.decode())
    elif modo==0:
        try:
            res=subprocess.check_output(orden_s)
            if res.decode()!='\n' or res.decode()!='':
                print(res.decode())
        except: pass
        

def install_ups(ups):
    try:
        if ups == "Juice4halt":
            comando('sudo systemctl stop juice4halt.service', 0)
            comando('sudo systemctl disable juice4halt.service', 0)
            comando('sudo rm /etc/systemd/system/juice4halt.service', 0)
            comando('sudo systemctl daemon-reload')
            comando('sudo rm -r /home/pi/juice4halt', 0)
            comando('git clone https://github.com/skhg/juice4halt.git /home/pi/juice4halt')
            comando('sudo /home/pi/juice4halt/setup.sh')
            print("UPS Juice4hatl instalada")

        elif ups == "Mcuzone":
            comando('sudo sh /srv/ups/uninstall.sh', 0)
            comando('sudo rm -r /srv/ups', 0)
            comando('git clone git@github.com:desarrollomining/ups.git /srv/ups')
            comando('sh /srv/ups/install.sh')
            print("UPS Mcuzone instalada")

        else:
            print("UPS no valida")

    except Exception as ex:
        print(f"Error instalando ups: {ups}")

def delete_ups(ups):
    try:
        if ups == "Juice4halt":
            comando('sudo systemctl stop juice4halt.service', 0)
            comando('sudo systemctl disable juice4halt.service', 0)
            comando('sudo rm /etc/systemd/system/juice4halt.service', 0)
            comando('sudo systemctl daemon-reload')
            print("UPS Juice4hatl desinstalada")

        elif ups == "Mcuzone":
            comando('sudo sh /srv/ups/uninstall.sh', 0)
            comando('sudo rm -r /srv/ups', 0)
            print("UPS Mcuzone desinstalada")
        
        else:
            print("UPS no valida")

    except Exception as ex:
        print(f"Error desinstalando ups: {ups}")

def config_ups():
    print('Configuracion de UPS\n')
    try:
        ups_actual = get_ups()
        print(f"UPS Configurada: {ups_actual}\n")

        while True:
            sel=input("Desea Salir (Q), Consultar (C), Instalar (I), Eliminar (E) UPS?: ")
            try:
                if sel=='C' or sel=='c':
                    ups_actual = get_ups()
                    print(f"UPS Configurada: {ups_actual}\n")

                elif sel=='I' or sel=='i':
                    if get_ups(): 
                        print(f"Ya existe una UPS configurada, primero debe eliminar antes de installar una nueva UPS\n")
                        continue

                    print("Seleccione UPS que desea configurar:")
                    print("1- Juice4halt")
                    print("2- Mcuzone")
                    sel_ups=input("Ingrese la opcion 1 o 2: ")
                    if sel_ups =="1":
                        install_ups("Juice4halt")
                        
                    elif sel_ups =="2":
                        install_ups("Mcuzone")

                    else:
                        print("Ingrese un valor valido")


                elif sel=="E" or sel=="e":
                    ups_actual = get_ups()
                    for ups in ups_actual:
                        delete_ups(ups)

                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 Exception as ex:
        print(f"Error: {ex}")


if __name__ == "__main__":
    config_ups()
