menu "ESP-WHO General Configuration"
    menu "Camera Configuration"
        
        choice PIXEL_FORMAT
            bool "Select Camera Pixel Format"
            default CAMERA_PIXEL_FORMAT_RGB565
            help
                Select Camera Pixel Format.
            
            config CAMERA_PIXEL_FORMAT_RGB565
                bool "RGB565"
            config CAMERA_PIXEL_FORMAT_YUV422
                bool "YUV422"
            config CAMERA_PIXEL_FORMAT_GRAYSCALE
                bool "GRAYSCALE"
            config CAMERA_PIXEL_FORMAT_JPEG
                bool "JPEG"
            config CAMERA_PIXEL_FORMAT_RGB888
                bool "RGB888"
            config CAMERA_PIXEL_FORMAT_RAW
                bool "RAW"
            config CAMERA_PIXEL_FORMAT_RGB444
                bool "RGB444"
            config CAMERA_PIXEL_FORMAT_RGB555
                bool "RGB555"

        endchoice

        choice CAMERA_MODULE
            bool "Select Camera Pinout"
            default CAMERA_MODULE_WROVER_KIT
            help
                Select Camera Pinout.

            config CAMERA_MODULE_WROVER_KIT
                bool "WROVER-KIT With OV2640 Module"
            config CAMERA_MODULE_ESP_EYE
                bool "ESP-EYE DevKit"
            config CAMERA_MODULE_ESP_S3_EYE
                bool "ESP-S3-EYE DevKit"
            config CAMERA_MODEL_ESP32_CAM_BOARD
                bool "ESP32 Camera Development Board"
            config CAMERA_MODULE_M5STACK_PSRAM
                bool "M5Stack Camera With PSRAM"
            config CAMERA_MODULE_M5STACK_WIDE
                bool "M5Stack Camera F (Wide)"
            config CAMERA_MODULE_AI_THINKER
                bool "ESP32-CAM by AI-Thinker"
            config CAMERA_MODULE_CUSTOM
                bool "Custom Camera Pinout"
        endchoice

        config CAMERA_PIN_PWDN
            depends on CAMERA_MODULE_CUSTOM
            int "Power Down pin"
            range -1 33
            default -1
            help
                Select Power Down pin or -1 for unmanaged.

        config CAMERA_PIN_RESET
            depends on CAMERA_MODULE_CUSTOM
            int "Reset pin"
            range -1 33
            default -1
            help
                Select Camera Reset pin or -1 for software reset.

        config CAMERA_PIN_XCLK
            depends on CAMERA_MODULE_CUSTOM
            int "XCLK pin"
            range 0 33
            default 21
            help
                Select Camera XCLK pin.

        config CAMERA_PIN_SIOD
            depends on CAMERA_MODULE_CUSTOM
            int "SIOD pin"
            range 0 33
            default 26
            help
                Select Camera SIOD pin.

        config CAMERA_PIN_SIOC
            depends on CAMERA_MODULE_CUSTOM
            int "SIOC pin"
            range 0 33
            default 27
            help
                Select Camera SIOC pin.

        config CAMERA_PIN_VSYNC
            depends on CAMERA_MODULE_CUSTOM
            int "VSYNC pin"
            range 0 39
            default 25
            help
                Select Camera VSYNC pin.

        config CAMERA_PIN_HREF
            depends on CAMERA_MODULE_CUSTOM
            int "HREF pin"
            range 0 39
            default 23
            help
                Select Camera HREF pin.

        config CAMERA_PIN_PCLK
            depends on CAMERA_MODULE_CUSTOM
            int "PCLK pin"
            range 0 39
            default 25
            help
                Select Camera PCLK pin.

        config CAMERA_PIN_Y2
            depends on CAMERA_MODULE_CUSTOM
            int "Y2 pin"
            range 0 39
            default 4
            help
                Select Camera Y2 pin.

        config CAMERA_PIN_Y3
            depends on CAMERA_MODULE_CUSTOM
            int "Y3 pin"
            range 0 39
            default 5
            help
                Select Camera Y3 pin.

        config CAMERA_PIN_Y4
            depends on CAMERA_MODULE_CUSTOM
            int "Y4 pin"
            range 0 39
            default 18
            help
                Select Camera Y4 pin.

        config CAMERA_PIN_Y5
            depends on CAMERA_MODULE_CUSTOM
            int "Y5 pin"
            range 0 39
            default 19
            help
                Select Camera Y5 pin.

        config CAMERA_PIN_Y6
            depends on CAMERA_MODULE_CUSTOM
            int "Y6 pin"
            range 0 39
            default 36
            help
                Select Camera Y6 pin.

        config CAMERA_PIN_Y7
            depends on CAMERA_MODULE_CUSTOM
            int "Y7 pin"
            range 0 39
            default 39
            help
                Select Camera Y7 pin.

        config CAMERA_PIN_Y8
            depends on CAMERA_MODULE_CUSTOM
            int "Y8 pin"
            range 0 39
            default 34
            help
                Select Camera Y8 pin.

        config CAMERA_PIN_Y9
            depends on CAMERA_MODULE_CUSTOM
            int "Y9 pin"
            range 0 39
            default 35
            help
                Select Camera Y9 pin.
    endmenu

    
    menu "LED Illuminator"
        config LED_ILLUMINATOR_ENABLED
            bool "LED Illuminator Enabled"
            default n
            help
            Enable an LED Flash or IR Illuminator

        config LED_LEDC_PIN
            depends on LED_ILLUMINATOR_ENABLED
            int "LED Illuminator GPIO Pin"
            range 0 33
            default 4
            help
            Set a pin to illuminate an onboard LED or IR Illuminator when streaming or taking snapshots.

        config LED_MAX_INTENSITY
            depends on LED_ILLUMINATOR_ENABLED
            int "LED Maximum Intensity (0-255)"
            range 0 255
            default 255
            help
            Limit the maximum intensity of the LED while streaming to prevent overheating (0-255).

        choice LED_LEDC_SPEED_MODE
            depends on LED_ILLUMINATOR_ENABLED
            bool "Select LEDC Timer Speed Mode"
            default LED_LEDC_LOW_SPEED_MODE
            help
            Select a speed mode for the LEDC channel 

        config LED_LEDC_LOW_SPEED_MODE  
            bool "LOW_SPEED_MODE"
        config LED_LEDC_HIGH_SPEED_MODE
            bool "HIGH_SPEED_MODE"
        endchoice

        config LED_LEDC_TIMER
            depends on LED_ILLUMINATOR_ENABLED
            int "LEDC Timer"
            range 0 3
            default 1
            help
            Select the LEDC Timer (0-3)

        config LED_LEDC_CHANNEL
            depends on LED_ILLUMINATOR_ENABLED
            int "LEDC Channel"
            range 0 7
            default 1
            help
            Select the LEDC Channel (0-7)
    endmenu



    menu "DL Configuration"

        config DL_ENABLED
            bool "Enable Deep-Learning Application"
            default y            

        choice DL_SELECT_APP
            bool "Select Application"
            depends on DL_ENABLED
            default DL_HUMAN_FACE

            config DL_HUMAN_FACE
                bool "Human Face"
            config DL_CAT_FACE
                bool "Cat Face"
            config DL_HUMAN_HAND
                bool "Human Hand"
        endchoice

        # Human Face Series
        choice DL_HUMAN_FACE_DETECTION_S1_MODEL
            bool "Select Human Face Detection Stage-1 Model"
            depends on DL_HUMAN_FACE
            default DL_HUMAN_FACE_DETECTION_S1_MSR01 

            config DL_HUMAN_FACE_DETECTION_S1_MSR01
                bool "HumanFaceDetectMSR01"
        endchoice

        config DL_HUMAN_FACE_DETECTION_S2_ENABLED
            bool "Enable Human Face Detection Stage-2"
            depends on DL_HUMAN_FACE
            default y

        choice DL_HUMAN_FACE_DETECTION_S2_MODEL
            bool "Select Human Face Detection Stage-2 Model"
            depends on DL_HUMAN_FACE_DETECTION_S2_ENABLED
            default DL_HUMAN_FACE_DETECTION_S2_MNP01

            config DL_HUMAN_FACE_DETECTION_S2_MNP01
                bool "HumanFaceDetectMNP01"
        endchoice


        config DL_HUMAN_FACE_RECOGNITION_ENABLED
            bool "Enable Human Face Recognition"
            depends on DL_HUMAN_FACE_DETECTION_S2_ENABLED
            default y

        choice DL_HUMAN_FACE_RECOGNITION_MODEL
            bool "Select Human Face Recognition Model"
            depends on DL_HUMAN_FACE_RECOGNITION_ENABLED
            default DL_HUMAN_FACE_RECOGNITION_XXX 

            config DL_HUMAN_FACE_RECOGNITION_XXX
                bool "HumanFaceRecognizeXXX"
        endchoice

        # Cat Face Series
        choice DL_CAT_FACE_DETECTION_MODEL
            bool "Select Cat Face Detection Model"
            depends on DL_CAT_FACE
            default DL_CAT_FACE_DETECTION_MN03

            config DL_CAT_FACE_DETECTION_MN03
                bool "CatFaceDetectMN03"
        endchoice


        # Human Hand Series

    endmenu
endmenu