from gpiozero import LED
from aux_functions import network_functions as nf

#5-bit LED indicator
led1 = LED(27)
led2 = LED(22)
led3 = LED(6)
led4 = LED(26)
led5 = LED(23)

led1Mask = 0b00001
led2Mask = 0b00010
led3Mask = 0b00100
led4Mask = 0b01000
led5Mask = 0b10000


#clear signal indication
def clear_signal():
    led1.off()
    led2.off()
    led3.off()
    led4.off()
    led5.off()


#signal indication
def indicate_signal(signal_val):
    if (signal_val & led1Mask):
        led1.on()
    
    if (signal_val & led2Mask):
        led2.on()
    
    if (signal_val & led3Mask):
        led3.on()
    
    if (signal_val & led4Mask):
        led4.on()
    
    if (signal_val & led5Mask):
        led5.on()


#Signaling/Logging system
def raiseFlag(flag):
    if flag == "Unauthorized":
        # flag unauthorized access (Signal indication 1)
        signal_val = 1
        #clear_signal()
        #indicate_signal(signal_val)

        signalStatus = "Unauthorized Access"

    elif flag == "RunawayAC":
        # flag runaway aircraft
        signal_val = 2
        #clear_signal()
        #indicate_signal(signal_val)

        signalStatus = "Runaway Aircraft"
    elif flag == "LogonSuccessful":
        # flag successful logon
        signal_val = 3
        #clear_signal()
        #indicate_signal(signal_val)

        signalStatus = "logon Successful"
    elif flag == "FlightPlanFailed":
        # flag flight plan file failure
        signal_val = 4
        #clear_signal()
        #indicate_signal(signal_val)

        signalStatus = "Flight Plan Failed"
    elif flag == "FeedbackFailed":
        # flag feedback failure
        signal_val = 5
        #clear_signal()
        #indicate_signal(signal_val)

        signalStatus = "Feedback Failed"
    elif flag == "WaypointsDownloadFailed":
        # flag waypoints download failure
        signal_val = 6
        #clear_signal()
        #indicate_signal(signal_val)

        signalStatus = "Waypoints Download Failed"
    elif flag == "RerouteRequestDenied":
        # flag reroute request denied
        signal_val = 7
        #clear_signal()
        #indicate_signal(signal_val)

        signalStatus = "Reroute Request Denied"
    elif flag == "CheckinAcknowledged":
        # flag checkin acknowledged
        signal_val = 8
        #clear_signal()
        #indicate_signal(signal_val)

        signalStatus = "Checkin Acknowledged"
    elif flag == "LogoffSuccessful":
        # flag logoff successful
        signal_val = 9
        #clear_signal()
        #indicate_signal(signal_val)

        signalStatus = "Logoff Successful"
    elif flag == "UpdateSuccessful":
        signal_val = 10
        #clear_signal()
        #indicate_signal(signal_val)

        signalStatus = "Tower update successful"
    elif flag == "UpdateNotSuccessful":
        signal_val = 11
        #clear_signal()
        #indicate_signal(signal_val)

        signalStatus = "Tower update not succecssfull"
    elif flag == "ConnectingToDrone":
        signal_val = 12
        #clear_signal()
        #indicate_signal(signal_val)

        signalStatus = "Connecting to drone"
    elif flag == "ConnectedToDrone":
        signal_val = 13
        #clear_signal()
        #indicate_signal(signal_val)

        signalStatus = "Connected to drone"
    elif flag == "ObtainingPosnEstimate":
        signal_val = 14
        #clear_signal()
        #indicate_signal(signal_val)

        signalStatus = "Obtaining Global position estimate"
    elif flag == "GlobalPosnObtained":
        signal_val = 15
        #clear_signal()
        #indicate_signal(signal_val)

        signalStatus = "Global position estimate OK"
    elif flag == "ArmingDrone":
        signal_val = 16
        #clear_signal()
        #indicate_signal(signal_val)

        signalStatus = "Drone is arming"
    elif (flag == "DroneArmed"):
        signal_val = 17
        #clear_signal()
        #indicate_signal(signal_val)

        signalStatus = "Drone armed successfully"
    
    elif (flag =="ClearedForTakeoff"):
        signal_val = 18
        #clear_signal()
        #indicate_signal(signal_val)
        
        signalStatus = "Takeoff clearance granted"
    
    elif (flag == "TakeoffDenied"):
        signal_val = 19
        
        #clear_signal()
        #indicate_signal(signal_val)
        
        signalStatus = "Takeoff denied"
    
    elif (flag == "CompulsoryLand"):
        signal_val = 20

        signalStatus = "Compulsory land"
        
    else:
        #flag unknown
        pass

    
    #update server on status
    nf.log_signal(signalStatus)

