module CHeadEnumVariables
    use CVoidEventHandlerCollection
    implicit none
    integer :: FillupHead = 0
    
    public
    
    type(VoidEventHandlerCollection) :: OnFillupHeadChange
    
    enum, bind(c)
        !enumerator FILLUP_HEAD_NEUTRAL
        enumerator FILLUP_HEAD_REMOVE
        enumerator FILLUP_HEAD_INSTALL
    end enum
    
    private :: FillupHead
    
    contains
    
    subroutine Set_FillupHead(v)
        use CManifolds, only: ToggleFillupHead
        implicit none
        integer , intent(in) :: v
#ifdef ExcludeExtraChanges
        if(FillupHead == v) return
#endif
        FillupHead = v
        
        if (FillupHead == FILLUP_HEAD_INSTALL) then
            call ToggleFillupHead(.true.)
        else if (FillupHead == FILLUP_HEAD_REMOVE) then
            call ToggleFillupHead(.false.)
        endif
        
#ifdef deb
	    print*, 'FillupHead=', FillupHead
#endif
        call OnFillupHeadChange%RunAll()
    end subroutine
    
    integer function Get_FillupHead()
        implicit none
        Get_FillupHead = FillupHead
    end function
    
    
    
    
    subroutine Set_FillupHead_WN(v)
    !DEC$ ATTRIBUTES DLLEXPORT :: Set_FillupHead_WN
    !DEC$ ATTRIBUTES ALIAS: 'Set_FillupHead_WN' :: Set_FillupHead_WN
        implicit none
        integer , intent(in) :: v
        call Set_FillupHead(v)
    end subroutine
    
    integer function Get_FillupHead_WN()
    !DEC$ ATTRIBUTES DLLEXPORT :: Get_FillupHead_WN
    !DEC$ ATTRIBUTES ALIAS: 'Get_FillupHead_WN' :: Get_FillupHead_WN
        implicit none
        Get_FillupHead_WN = FillupHead
    end function
    
    
    
    
    
    
    
    
    
    
    
    
    
    logical function Get_RemoveFillupHead()
    !DEC$ ATTRIBUTES DLLEXPORT :: Get_RemoveFillupHead
    !DEC$ ATTRIBUTES ALIAS: 'Get_RemoveFillupHead' :: Get_RemoveFillupHead
        implicit none
        Get_RemoveFillupHead = .false. ! FillupHead == REMOVE_FILLUP_HEAD
    end function
    
    logical function Get_InstallFillupHead()
    !DEC$ ATTRIBUTES DLLEXPORT :: Get_InstallFillupHead
    !DEC$ ATTRIBUTES ALIAS: 'Get_InstallFillupHead' :: Get_InstallFillupHead
        implicit none
        Get_InstallFillupHead = .false. ! FillupHead == INSTALL_FILLUP_HEAD
    end function
    
end module CHeadEnumVariables