menu "ESP-WHO General Configuration"
    
    menu "WiFi Configuration"

        config ESP_HOST_NAME
            string "Camera Host Name"
            default ""
            help
            Hostname that the camera will advertise over mDNS.

        config ESP_WIFI_SSID
            string "WiFi STA SSID"
            default ""
            help
            WiFi SSID (network name) to connect to or empty for Off.

        config ESP_WIFI_PASSWORD
            string "WiFi STA Password"
            default ""
            help
            WiFi Password if WEP/WPA/WPA2 or empty if Open.
            
        config ESP_WIFI_AP_SSID
            string "WiFi AP SSID"
            default "ESP32-Camera"
            help
            AP SSID (network name) to create or empty for Off.

        config ESP_WIFI_AP_PASSWORD
            string "WiFi AP Password"
            default ""
            help
            AP password for WPA2 or empty for Open.

        config MAX_STA_CONN
            int "Maximal STA connections"
            default 1
            help
            Max number of the STA connects to AP.

        config ESP_WIFI_AP_CHANNEL
            string "WiFi AP Channel"
            default ""
            help
            AP channel for better connection performance.

        config SERVER_IP
            string "WiFi AP IP Address"
            default "192.168.4.1"
            help
                IP address that the ESP will assign to it's AP interface. You can use this IP to connect to the camera after flashing.

        config ESP_MAXIMUM_RETRY
            int "Maximum retry"
            default 5
            help
            Set the Maximum retry to avoid station reconnecting to the AP unlimited when the AP is really inexistent.

    endmenu

    menu "Camera Configuration"

        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_S2_KALUGA
                bool "ESP32-S2-Kaluga-1 V1.3"
            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
endmenu