module CDrillingConsole
    use CDrillingConsoleVariables
    use SimulationVariables
    use SimulationVariables 
    ! use CSimulationVariables
    use CLog4
    use CLog3
    implicit none    
    public    
    contains  


    subroutine DrillingConsoleFromJson(parent)
        type(json_value),pointer :: parent
        type(json_core) :: json
        type(json_value),pointer :: p,pval

        ! 1. get related root
        call json%get(parent,'Drilling',p)
        
        ! 2. get member of data type from node
		call json%get(p,'AssignmentSwitch',pval)
		call json%get(pval,data%Equipments%DrillingConsole%AssignmentSwitch)
		call json%get(p,'EmergencySwitch',pval)
		call json%get(pval,data%Equipments%DrillingConsole%EmergencySwitch)
		call json%get(p,'RTTorqueLimitKnob',pval)
		call json%get(pval,data%Equipments%DrillingConsole%RTTorqueLimitKnob)
		call json%get(p,'MP1CPSwitchI',pval)
		call json%get(pval,data%Equipments%DrillingConsole%MP1CPSwitchI)
		call json%get(p,'MP1CPSwitchT',pval)
		call json%get(pval,data%Equipments%DrillingConsole%MP1CPSwitchT)
		call json%get(p,'MP1CPSwitch',pval)
		call json%get(pval,data%Equipments%DrillingConsole%MP1CPSwitch)
		call json%get(p,'MP1ThrottleUpdate',pval)
		call json%get(pval,data%Equipments%DrillingConsole%MP1ThrottleUpdate)
		call json%get(p,'MP1Throttle',pval)
		call json%get(pval,data%Equipments%DrillingConsole%MP1Throttle)
		call json%get(p,'MP2SwitchI',pval)
		call json%get(pval,data%Equipments%DrillingConsole%MP2SwitchI)
		call json%get(p,'MP2SwitchT',pval)
		call json%get(pval,data%Equipments%DrillingConsole%MP2SwitchT)
		call json%get(p,'MP2Switch',pval)
		call json%get(pval,data%Equipments%DrillingConsole%MP2Switch)
		call json%get(p,'MP2ThrottleUpdate',pval)
		call json%get(pval,data%Equipments%DrillingConsole%MP2ThrottleUpdate)
		call json%get(p,'MP2Throttle',pval)
		call json%get(pval,data%Equipments%DrillingConsole%MP2Throttle)
		call json%get(p,'DWSwitch',pval)
		call json%get(pval,data%Equipments%DrillingConsole%DWSwitch)
		call json%get(p,'DWThrottle',pval)
		call json%get(pval,data%Equipments%DrillingConsole%DWThrottle)
		call json%get(p,'RTSwitch',pval)
		call json%get(pval,data%Equipments%DrillingConsole%RTSwitch)
		call json%get(p,'RTThrottle',pval)
		call json%get(pval,data%Equipments%DrillingConsole%RTThrottle)
		call json%get(p,'DWBreak',pval)
		call json%get(pval,data%Equipments%DrillingConsole%DWBreak)
		call json%get(p,'PreviousDWBreak',pval)
		call json%get(pval,data%Equipments%DrillingConsole%PreviousDWBreak)
		call json%get(p,'ForceBreak',pval)
		call json%get(pval,data%Equipments%DrillingConsole%ForceBreak)
		call json%get(p,'DWAcceleretor',pval)
		call json%get(pval,data%Equipments%DrillingConsole%DWAcceleretor)
		call json%get(p,'DWTransmisionLever',pval)
		call json%get(pval,data%Equipments%DrillingConsole%DWTransmisionLever)
		call json%get(p,'DWPowerLever',pval)
		call json%get(pval,data%Equipments%DrillingConsole%DWPowerLever)
		call json%get(p,'TongLever',pval)
		call json%get(pval,data%Equipments%DrillingConsole%TongLever)
		call json%get(p,'RTTransmissionLever',pval)
		call json%get(pval,data%Equipments%DrillingConsole%RTTransmissionLever)
		call json%get(p,'DWClutchLever',pval)
		call json%get(pval,data%Equipments%DrillingConsole%DWClutchLever)
		call json%get(p,'EddyBreakLever',pval)
		call json%get(pval,data%Equipments%DrillingConsole%EddyBreakLever)
		call json%get(p,'AutoDW',pval)
		call json%get(pval,data%Equipments%DrillingConsole%AutoDW)
		call json%get(p,'GEN1',pval)
		call json%get(pval,data%Equipments%DrillingConsole%GEN1)
		call json%get(p,'GEN2',pval)
		call json%get(pval,data%Equipments%DrillingConsole%GEN2)
		call json%get(p,'GEN3',pval)
		call json%get(pval,data%Equipments%DrillingConsole%GEN3)
		call json%get(p,'GEN4',pval)
		call json%get(pval,data%Equipments%DrillingConsole%GEN4)
		call json%get(p,'Permission_OpenKellyCock',pval)
		call json%get(pval,data%Equipments%DrillingConsole%Permission_OpenKellyCock)
		call json%get(p,'OpenKellyCock',pval)
		call json%get(pval,data%Equipments%DrillingConsole%OpenKellyCock)
		call json%get(p,'Permission_CloseKellyCock',pval)
		call json%get(pval,data%Equipments%DrillingConsole%Permission_CloseKellyCock)
		call json%get(p,'CloseKellyCock',pval)
		call json%get(pval,data%Equipments%DrillingConsole%CloseKellyCock)
		call json%get(p,'Permission_OpenSafetyValve',pval)
		call json%get(pval,data%Equipments%DrillingConsole%Permission_OpenSafetyValve)
		call json%get(p,'OpenSafetyValve',pval)
		call json%get(pval,data%Equipments%DrillingConsole%OpenSafetyValve)
		call json%get(p,'Permission_CloseSafetyValve',pval)
		call json%get(pval,data%Equipments%DrillingConsole%Permission_CloseSafetyValve)
		call json%get(p,'CloseSafetyValve',pval)
		call json%get(pval,data%Equipments%DrillingConsole%CloseSafetyValve)
		call json%get(p,'Permission_IRSafetyValve',pval)
		call json%get(pval,data%Equipments%DrillingConsole%Permission_IRSafetyValve)
		call json%get(p,'IRSafetyValve',pval)
		call json%get(pval,data%Equipments%DrillingConsole%IRSafetyValve)
		call json%get(p,'Permission_IRIBop',pval)
		call json%get(pval,data%Equipments%DrillingConsole%Permission_IRIBop)
		call json%get(p,'IRIBop',pval)
		call json%get(pval,data%Equipments%DrillingConsole%IRIBop)
		call json%get(p,'LatchPipe',pval)
		call json%get(pval,data%Equipments%DrillingConsole%LatchPipe)
		call json%get(p,'UnlatchPipe',pval)
		call json%get(pval,data%Equipments%DrillingConsole%UnlatchPipe)
		call json%get(p,'Swing',pval)
		call json%get(pval,data%Equipments%DrillingConsole%Swing)
		call json%get(p,'FillMouseHole',pval)
		call json%get(pval,data%Equipments%DrillingConsole%FillMouseHole)
		call json%get(p,'Slips',pval)
		call json%get(pval,data%Equipments%DrillingConsole%Slips)
		call json%get(p,'BrakeLeverCoefficient',pval)
		call json%get(pval,data%Equipments%DrillingConsole%BrakeLeverCoefficient)
		call json%get(p,'HideDrillingBrake',pval)
		call json%get(pval,data%Equipments%DrillingConsole%HideDrillingBrake)
		call json%get(p,'ParkingBrakeBtn',pval)
		call json%get(pval,data%Equipments%DrillingConsole%ParkingBrakeBtn)

		! call json%get(p,'ParkingBrakeLed',pval)
		! call json%get(pval,data%Equipments%DrillingConsole%ParkingBrakeLed)
		! call json%get(p,'GEN1LED',pval)
		! call json%get(pval,data%Equipments%DrillingConsole%GEN1LED)
		! call json%get(p,'GEN2LED',pval)
		! call json%get(pval,data%Equipments%DrillingConsole%GEN2LED)
		! call json%get(p,'GEN3LED',pval)
		! call json%get(pval,data%Equipments%DrillingConsole%GEN3LED)
		! call json%get(p,'GEN4LED',pval)
		! call json%get(pval,data%Equipments%DrillingConsole%GEN4LED)
		! call json%get(p,'SCR1LED',pval)
		! call json%get(pval,data%Equipments%DrillingConsole%SCR1LED)
		! call json%get(p,'SCR2LED',pval)
		! call json%get(pval,data%Equipments%DrillingConsole%SCR2LED)
		! call json%get(p,'SCR3LED',pval)
		! call json%get(pval,data%Equipments%DrillingConsole%SCR3LED)
		! call json%get(p,'SCR4LED',pval)
		! call json%get(pval,data%Equipments%DrillingConsole%SCR4LED)
		! call json%get(p,'MP1BLWR',pval)
		! call json%get(pval,data%Equipments%DrillingConsole%MP1BLWR)
		! call json%get(p,'MP2BLWR',pval)
		! call json%get(pval,data%Equipments%DrillingConsole%MP2BLWR)
		! call json%get(p,'DWBLWR',pval)
		! call json%get(pval,data%Equipments%DrillingConsole%DWBLWR)
		! call json%get(p,'RTBLWR',pval)
		! call json%get(pval,data%Equipments%DrillingConsole%RTBLWR)
		! call json%get(p,'PWRLIM',pval)
		! call json%get(pval,data%Equipments%DrillingConsole%PWRLIM)
		! call json%get(p,'PWRLIMMTR',pval)
		! call json%get(pval,data%Equipments%DrillingConsole%PWRLIMMTR)
		! call json%get(p,'RTTorqueLimitGauge',pval)
		! call json%get(pval,data%Equipments%DrillingConsole%RTTorqueLimitGauge)
		! call json%get(p,'AutoDWLED',pval)
		! call json%get(pval,data%Equipments%DrillingConsole%AutoDWLED)
		! call json%get(p,'GEN1BTNLED',pval)
		! call json%get(pval,data%Equipments%DrillingConsole%GEN1BTNLED)
		! call json%get(p,'GEN2BTNLED',pval)
		! call json%get(pval,data%Equipments%DrillingConsole%GEN2BTNLED)
		! call json%get(p,'GEN3BTNLED',pval)
		! call json%get(pval,data%Equipments%DrillingConsole%GEN3BTNLED)
		! call json%get(p,'GEN4BTNLED',pval)
		! call json%get(pval,data%Equipments%DrillingConsole%GEN4BTNLED)
		! call json%get(p,'OpenKellyCockLed',pval)
		! call json%get(pval,data%Equipments%DrillingConsole%OpenKellyCockLed)
		! call json%get(p,'CloseKellyCockLed',pval)
		! call json%get(pval,data%Equipments%DrillingConsole%CloseKellyCockLed)
		! call json%get(p,'OpenSafetyValveLed',pval)
		! call json%get(pval,data%Equipments%DrillingConsole%OpenSafetyValveLed)
		! call json%get(p,'CloseSafetyValveLed',pval)
		! call json%get(pval,data%Equipments%DrillingConsole%CloseSafetyValveLed)
		! call json%get(p,'IRSafetyValveLed',pval)
		! call json%get(pval,data%Equipments%DrillingConsole%IRSafetyValveLed)
		! call json%get(p,'IRIBopLed',pval)
		! call json%get(pval,data%Equipments%DrillingConsole%IRIBopLed)
		! call json%get(p,'LatchPipeLED',pval)
		! call json%get(pval,data%Equipments%DrillingConsole%LatchPipeLED)
		! call json%get(p,'UnlatchPipeLED',pval)
		! call json%get(pval,data%Equipments%DrillingConsole%UnlatchPipeLED)
		! call json%get(p,'SwingLed',pval)
		! call json%get(pval,data%Equipments%DrillingConsole%SwingLed)
		! call json%get(p,'FillMouseHoleLed',pval)
		! call json%get(pval,data%Equipments%DrillingConsole%FillMouseHoleLed)
    end subroutine

    subroutine DrillingConsoleToJson(parent)

        type(json_value),pointer :: parent
        type(json_core) :: json
        type(json_value),pointer :: p

        ! 1. create new node
        call json%create_object(p,'Drilling')
        ! call json%add(p,"AssignmentSwitch",data%Equipments%DrillingConsole%AssignmentSwitch)
        ! call json%add(p,"EmergencySwitch",data%Equipments%DrillingConsole%EmergencySwitch)
        ! call json%add(p,"RTTorqueLimitKnob",data%Equipments%DrillingConsole%RTTorqueLimitKnob)
        ! call json%add(p,"MP1CPSwitchI",data%Equipments%DrillingConsole%MP1CPSwitchI)
        ! call json%add(p,"MP1CPSwitchT",data%Equipments%DrillingConsole%MP1CPSwitchT)
        ! call json%add(p,"MP1CPSwitch",data%Equipments%DrillingConsole%MP1CPSwitch)
        ! call json%add(p,"MP1ThrottleUpdate",data%Equipments%DrillingConsole%MP1ThrottleUpdate)
        ! call json%add(p,"MP1Throttle",data%Equipments%DrillingConsole%MP1Throttle)
        ! call json%add(p,"MP2SwitchI",data%Equipments%DrillingConsole%MP2SwitchI)
        ! call json%add(p,"MP2SwitchT",data%Equipments%DrillingConsole%MP2SwitchT)
        ! call json%add(p,"MP2Switch",data%Equipments%DrillingConsole%MP2Switch)
        ! call json%add(p,"MP2ThrottleUpdate",data%Equipments%DrillingConsole%MP2ThrottleUpdate)
        ! call json%add(p,"MP2Throttle",data%Equipments%DrillingConsole%MP2Throttle)
        ! call json%add(p,"DWSwitch",data%Equipments%DrillingConsole%DWSwitch)
        ! call json%add(p,"DWThrottle",data%Equipments%DrillingConsole%DWThrottle)
        ! call json%add(p,"RTSwitch",data%Equipments%DrillingConsole%RTSwitch)
        ! call json%add(p,"RTThrottle",data%Equipments%DrillingConsole%RTThrottle)
        ! call json%add(p,"DWBreak",data%Equipments%DrillingConsole%DWBreak)
        ! call json%add(p,"PreviousDWBreak",data%Equipments%DrillingConsole%PreviousDWBreak)
        ! call json%add(p,"ForceBreak",data%Equipments%DrillingConsole%ForceBreak)
        ! call json%add(p,"DWAcceleretor",data%Equipments%DrillingConsole%DWAcceleretor)
        ! call json%add(p,"DWTransmisionLever",data%Equipments%DrillingConsole%DWTransmisionLever)
        ! call json%add(p,"DWPowerLever",data%Equipments%DrillingConsole%DWPowerLever)
        ! call json%add(p,"TongLever",data%Equipments%DrillingConsole%TongLever)
        ! call json%add(p,"RTTransmissionLever",data%Equipments%DrillingConsole%RTTransmissionLever)
        ! call json%add(p,"DWClutchLever",data%Equipments%DrillingConsole%DWClutchLever)
        ! call json%add(p,"EddyBreakLever",data%Equipments%DrillingConsole%EddyBreakLever)
        ! call json%add(p,"AutoDW",data%Equipments%DrillingConsole%AutoDW)
        ! call json%add(p,"GEN1",data%Equipments%DrillingConsole%GEN1)
        ! call json%add(p,"GEN2",data%Equipments%DrillingConsole%GEN2)
        ! call json%add(p,"GEN3",data%Equipments%DrillingConsole%GEN3)
        ! call json%add(p,"GEN4",data%Equipments%DrillingConsole%GEN4)
        ! call json%add(p,"Permission_OpenKellyCock",data%Equipments%DrillingConsole%Permission_OpenKellyCock)
        ! call json%add(p,"OpenKellyCock",data%Equipments%DrillingConsole%OpenKellyCock)
        ! call json%add(p,"Permission_CloseKellyCock",data%Equipments%DrillingConsole%Permission_CloseKellyCock)
        ! call json%add(p,"CloseKellyCock",data%Equipments%DrillingConsole%CloseKellyCock)
        ! call json%add(p,"Permission_OpenSafetyValve",data%Equipments%DrillingConsole%Permission_OpenSafetyValve)
        ! call json%add(p,"OpenSafetyValve",data%Equipments%DrillingConsole%OpenSafetyValve)
        ! call json%add(p,"Permission_CloseSafetyValve",data%Equipments%DrillingConsole%Permission_CloseSafetyValve)
        ! call json%add(p,"CloseSafetyValve",data%Equipments%DrillingConsole%CloseSafetyValve)
        ! call json%add(p,"Permission_IRSafetyValve",data%Equipments%DrillingConsole%Permission_IRSafetyValve)
        ! call json%add(p,"IRSafetyValve",data%Equipments%DrillingConsole%IRSafetyValve)
        ! call json%add(p,"Permission_IRIBop",data%Equipments%DrillingConsole%Permission_IRIBop)
        ! call json%add(p,"IRIBop",data%Equipments%DrillingConsole%IRIBop)
        ! call json%add(p,"LatchPipe",data%Equipments%DrillingConsole%LatchPipe)
        ! call json%add(p,"UnlatchPipe",data%Equipments%DrillingConsole%UnlatchPipe)
        ! call json%add(p,"Swing",data%Equipments%DrillingConsole%Swing)
        ! call json%add(p,"FillMouseHole",data%Equipments%DrillingConsole%FillMouseHole)
        ! call json%add(p,"Slips",data%Equipments%DrillingConsole%Slips)
        ! call json%add(p,"BrakeLeverCoefficient",data%Equipments%DrillingConsole%BrakeLeverCoefficient)
        ! call json%add(p,"HideDrillingBrake",data%Equipments%DrillingConsole%HideDrillingBrake)
        ! call json%add(p,"ParkingBrakeBtn",data%Equipments%DrillingConsole%ParkingBrakeBtn)



		call json%add(p,"ParkingBrakeLed",data%Equipments%DrillingConsole%ParkingBrakeLed)
        call json%add(p,"GEN1LED",data%Equipments%DrillingConsole%GEN1LED)
        call json%add(p,"GEN2LED",data%Equipments%DrillingConsole%GEN2LED)
        call json%add(p,"GEN3LED",data%Equipments%DrillingConsole%GEN3LED)
        call json%add(p,"GEN4LED",data%Equipments%DrillingConsole%GEN4LED)
        call json%add(p,"SCR1LED",data%Equipments%DrillingConsole%SCR1LED)
        call json%add(p,"SCR2LED",data%Equipments%DrillingConsole%SCR2LED)
        call json%add(p,"SCR3LED",data%Equipments%DrillingConsole%SCR3LED)
        call json%add(p,"SCR4LED",data%Equipments%DrillingConsole%SCR4LED)
        call json%add(p,"MP1BLWR",data%Equipments%DrillingConsole%MP1BLWR)
        call json%add(p,"MP2BLWR",data%Equipments%DrillingConsole%MP2BLWR)
        call json%add(p,"DWBLWR",data%Equipments%DrillingConsole%DWBLWR)
        call json%add(p,"RTBLWR",data%Equipments%DrillingConsole%RTBLWR)
        call json%add(p,"PWRLIM",data%Equipments%DrillingConsole%PWRLIM)
        call json%add(p,"PWRLIMMTR",data%Equipments%DrillingConsole%PWRLIMMTR)
        call json%add(p,"RTTorqueLimitGauge",data%Equipments%DrillingConsole%RTTorqueLimitGauge)
        call json%add(p,"AutoDWLED",data%Equipments%DrillingConsole%AutoDWLED)
        call json%add(p,"GEN1BTNLED",data%Equipments%DrillingConsole%GEN1BTNLED)
        call json%add(p,"GEN2BTNLED",data%Equipments%DrillingConsole%GEN2BTNLED)
        call json%add(p,"GEN3BTNLED",data%Equipments%DrillingConsole%GEN3BTNLED)
        call json%add(p,"GEN4BTNLED",data%Equipments%DrillingConsole%GEN4BTNLED)
        call json%add(p,"OpenKellyCockLed",data%Equipments%DrillingConsole%OpenKellyCockLed)
        call json%add(p,"CloseKellyCockLed",data%Equipments%DrillingConsole%CloseKellyCockLed)
        call json%add(p,"OpenSafetyValveLed",data%Equipments%DrillingConsole%OpenSafetyValveLed)
        call json%add(p,"CloseSafetyValveLed",data%Equipments%DrillingConsole%CloseSafetyValveLed)
        call json%add(p,"IRSafetyValveLed",data%Equipments%DrillingConsole%IRSafetyValveLed)
        call json%add(p,"IRIBopLed",data%Equipments%DrillingConsole%IRIBopLed)
        call json%add(p,"LatchPipeLED",data%Equipments%DrillingConsole%LatchPipeLED)
        call json%add(p,"UnlatchPipeLED",data%Equipments%DrillingConsole%UnlatchPipeLED)
        call json%add(p,"SwingLed",data%Equipments%DrillingConsole%SwingLed)
        call json%add(p,"FillMouseHoleLed",data%Equipments%DrillingConsole%FillMouseHoleLed)

        call json%add(parent,p)
    end subroutine
    
end module CDrillingConsole