module CBopControlPanel
    ! use CBopControlPanel
    use SimulationVariables
    implicit none    
    public    
    contains

    subroutine CBopToJson(parent)

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

        ! 1. create new node
        call json%create_object(p,'CBop')
        
        call json%add(p,"AnnularRegulatorSetControl",data%Equipments%ContolPanel%CBop%AnnularRegulatorSetControl)
        call json%add(p,"AirMasterValve",data%Equipments%ContolPanel%CBop%AirMasterValve)
        call json%add(p,"ByePassValve",data%Equipments%ContolPanel%CBop%ByePassValve)
        call json%add(p,"AnnularValve",data%Equipments%ContolPanel%CBop%AnnularValve)
        call json%add(p,"UpperRamsValve",data%Equipments%ContolPanel%CBop%UpperRamsValve)
        call json%add(p,"MiddleRamsValve",data%Equipments%ContolPanel%CBop%MiddleRamsValve)
        call json%add(p,"KillLineValve",data%Equipments%ContolPanel%CBop%KillLineValve)
        call json%add(p,"ChokeLineValve",data%Equipments%ContolPanel%CBop%ChokeLineValve)
        call json%add(p,"LowerRamsValve",data%Equipments%ContolPanel%CBop%LowerRamsValve)
        call json%add(p,"ManifoldPressureGauge",data%Equipments%ContolPanel%CBop%ManifoldPressureGauge)
        call json%add(p,"AirSupplyPressureGauge",data%Equipments%ContolPanel%CBop%AirSupplyPressureGauge)
        call json%add(p,"AccumulatorPressureGauge",data%Equipments%ContolPanel%CBop%AccumulatorPressureGauge)
        call json%add(p,"AnnularPressureGauge",data%Equipments%ContolPanel%CBop%AnnularPressureGauge)
        call json%add(p,"AnnularOpenLED",data%Equipments%ContolPanel%CBop%AnnularOpenLED)
        call json%add(p,"AnnularCloseLED",data%Equipments%ContolPanel%CBop%AnnularCloseLED)
        call json%add(p,"UpperRamsOpenLED",data%Equipments%ContolPanel%CBop%UpperRamsOpenLED)
        call json%add(p,"UpperRamsCloseLED",data%Equipments%ContolPanel%CBop%UpperRamsCloseLED)
        call json%add(p,"MiddleRamsOpenLED",data%Equipments%ContolPanel%CBop%MiddleRamsOpenLED)
        call json%add(p,"MiddleRamsCloseLED",data%Equipments%ContolPanel%CBop%MiddleRamsCloseLED)
        call json%add(p,"KillLineOpenLED",data%Equipments%ContolPanel%CBop%KillLineOpenLED)
        call json%add(p,"KillLineCloseLED",data%Equipments%ContolPanel%CBop%KillLineCloseLED)
        call json%add(p,"ChokeLineOpenLED",data%Equipments%ContolPanel%CBop%ChokeLineOpenLED)
        call json%add(p,"ChokeLineCloseLED",data%Equipments%ContolPanel%CBop%ChokeLineCloseLED)
        call json%add(p,"LowerRamsOpenLED",data%Equipments%ContolPanel%CBop%LowerRamsOpenLED)
        call json%add(p,"LowerRamsCloseLED",data%Equipments%ContolPanel%CBop%LowerRamsCloseLED)
        call json%add(p,"AnnularStatus",data%Equipments%ContolPanel%CBop%AnnularStatus)
        call json%add(p,"UpperRamsStatus",data%Equipments%ContolPanel%CBop%UpperRamsStatus)
        call json%add(p,"MiddleRamsStatus",data%Equipments%ContolPanel%CBop%MiddleRamsStatus)
        call json%add(p,"LowerRamsStatus",data%Equipments%ContolPanel%CBop%LowerRamsStatus)
    

        call json%add(parent,p)
    end subroutine



    subroutine OpenAnnular()
        use CManifolds
        implicit none
        call ChangeValve(52, .true.)
    end subroutine
    
    subroutine CloseAnnular()
        use CManifolds
        implicit none
        call ChangeValve(52, .false.)
    end subroutine
    
    subroutine OpenUpperRams()
        use CManifolds
        implicit none
        call ChangeValve(51, .true.)
    end subroutine
    
    subroutine CloseUpperRams()
        use CManifolds
        implicit none
        call ChangeValve(51, .false.)
    end subroutine
    
    subroutine OpenMiddleRams()
        use CManifolds
        implicit none
        call ToggleMiddleRams(.true.)
    end subroutine
    
    subroutine CloseMiddleRams()
        use CManifolds
        implicit none
        call ToggleMiddleRams(.false.)
    end subroutine
    
    subroutine OpenKillLine()
        use CManifolds
        implicit none
        call ChangeValve(46, .true.)        
    end subroutine
    
    subroutine CloseKillLine()
        use CManifolds
        implicit none
        call ChangeValve(46, .false.)        
    end subroutine
    
    subroutine OpenChokeLine()
        use CManifolds
        implicit none
        call ChangeValve(47, .true.)
         !WRITE (*,*) ' valve 47 true '
    end subroutine
    
    subroutine CloseChokeLine()
        use CManifolds
        implicit none
        call ChangeValve(47, .false.)
         !WRITE (*,*) ' valve 47 false '
    end subroutine
    
    subroutine OpenLowerRams()
        use CManifolds
        implicit none
        call ChangeValve(49, .true.)
        !WRITE (*,*) ' valve 49 true '
    end subroutine
    
    subroutine CloseLowerRams()
        use CManifolds
        implicit none
        call ChangeValve(49, .false.)
        !WRITE (*,*) ' valve 49 false '
    end subroutine

 end module CBopControlPanel