#!/usr/bin/env python3



from get_specs import get_multi
import sys
import uuid
import os
import signal
from PIL import Image
from label_image import generate_code


def input_cable():
    print("")
    print("Use the full part number. Spaces, special characters are allowed. Do not specify the brand.")
    print("")
    print("Please enter a part number and press enter:")
    inputnum = input("").strip()
    if len(inputnum) < 2:
        killall_signal(0, 0)
    print("Input part number:", inputnum)
    print("Searching databases for cables...")
    # Search both AW and BL sites
    status, output = get_multi(["BL"+inputnum, "AW"+inputnum], delay=0.1, dir="temp/" + str(uuid.uuid4()) + "/", cache=False)
    print("")
    if len(output) > 1:
        for i in output:
            print(i[1], i[0])
        print("Multiple brands with the same part number! Please type \"b\" for the Belden part number or \"a\" for the Alphawire cable")
        inputbrand = input()
        if inputbrand == "b":
            output = [output[0]]
        elif inputbrand == "a":
            output = [output[1]]
    elif len(output) == 0:
        print("No results found for part number", inputnum + ". Please try again with a different part number.")
        return
    
    output = output[0]
    print("")
    if output[2] and output[3]:
        print("Cable result found -",output[1], output[0], "with high-quality image and full specs")
    elif output[2]:
        print("Cable result found -",output[1], output[0], "with high-quality image and no specs")
    elif output[3]:
        print("Cable result found -",output[1], output[0], "with no/low quality image and full specs")
    else:
        print("Cable result found -",output[1], output[0], "with no/low quality image and no specs")
    print("")
    if not output[3]:
        print("Unable to decode cable specs. Please try again with a different part number.")
        return False
    else:
        print("")
        print("*** Cable details confirmed. Creating label...")
        print("")
        img = None
        imgstr = ""
        if output[1] == "Belden":
            imgstr = "BL"
        elif output[1] == "Alphawire":
            imgstr = "AW"
        img = generate_code(imgstr + output[0])
        os.makedirs("labels", exist_ok=True)
        img.save("labels/" + imgstr + output[0] + ".png")

def delete_folder(path):
    # Check if the path is a directory
    if not os.path.isdir(path):
        return
    
    # List all files and directories in the path
    for filename in os.listdir(path):
        file_path = os.path.join(path, filename)
        # If it's a directory, recursively call this function
        if os.path.isdir(file_path):
            delete_folder(file_path)
        else:
            # If it's a file, remove it
            os.remove(file_path)
    
    # After removing all contents, remove the directory itself
    os.rmdir(path)

def killall_signal(a,b):
    delete_folder("temp")
    os.kill(os.getpid(), 9) # dirty kill of self

if __name__ == "__main__":
    
    signal.signal(signal.SIGINT, killall_signal)
    signal.signal(signal.SIGTERM, killall_signal)
    print("Welcome to the Jukebox cable utility. This tool will allow you to verify Belden & Alphawire cable part numbers and create labels for samples in the Jukebox.")
    print("This tool requires internet access to download cable specifications and verify part numbers.")
    #print("Use Ctrl+C to exit.")
    while True:
        delete_folder("temp")
        input_cable()