menu "ESP Library Utils Configurations"
    config ESP_UTILS_CONF_FILE_SKIP
        bool "Unckeck this to use custom `esp_utils_conf.h`"
        default y

    menu "Check functions"
        depends on ESP_UTILS_CONF_FILE_SKIP
        choice ESP_UTILS_CONF_CHECK_HANDLE_METHOD
            prompt "Select handle method when check failed"
            default ESP_UTILS_CHECK_HANDLE_WITH_ERROR_LOG

            config ESP_UTILS_CHECK_HANDLE_WITH_NONE
                bool "Do nothing"

            config ESP_UTILS_CHECK_HANDLE_WITH_ERROR_LOG
                bool "Print error message"

            config ESP_UTILS_CHECK_HANDLE_WITH_ASSERT
                bool "Assert"
        endchoice

        config ESP_UTILS_CONF_CHECK_HANDLE_METHOD
            int
            default 0 if ESP_UTILS_CHECK_HANDLE_WITH_NONE
            default 1 if ESP_UTILS_CHECK_HANDLE_WITH_ERROR_LOG
            default 2 if ESP_UTILS_CHECK_HANDLE_WITH_ASSERT
    endmenu

    menu "Log functions"
        depends on ESP_UTILS_CONF_FILE_SKIP

        choice ESP_UTILS_CONF_LOG_LEVEL
            prompt "Select global log level"
            default ESP_UTILS_CONF_LOG_LEVEL_INFO

            config ESP_UTILS_CONF_LOG_LEVEL_DEBUG
                bool "Debug"
                help
                    Extra information which is not necessary for normal use (values, pointers, sizes, etc)

            config ESP_UTILS_CONF_LOG_LEVEL_INFO
                bool "Info"
                help
                    Information messages which describe the normal flow of events

            config ESP_UTILS_CONF_LOG_LEVEL_WARNING
                bool "Warning"
                help
                    Error conditions from which recovery measures have been taken

            config ESP_UTILS_CONF_LOG_LEVEL_ERROR
                bool "Error"
                help
                    Critical errors, software module cannot recover on its own

            config ESP_UTILS_CONF_LOG_LEVEL_NONE
                bool "None"
                help
                    No log output
        endchoice

        config ESP_UTILS_CONF_LOG_LEVEL
            int
            default 0 if ESP_UTILS_CONF_LOG_LEVEL_DEBUG
            default 1 if ESP_UTILS_CONF_LOG_LEVEL_INFO
            default 2 if ESP_UTILS_CONF_LOG_LEVEL_WARNING
            default 3 if ESP_UTILS_CONF_LOG_LEVEL_ERROR
            default 4 if ESP_UTILS_CONF_LOG_LEVEL_NONE

        config ESP_UTILS_CONF_ENABLE_LOG_TRACE
            bool "Enable trace function"
            depends on ESP_UTILS_CONF_LOG_LEVEL_DEBUG
            default n
            help
                If enabled, the driver will print trace log messages when enter/exit functions, useful for debugging
    endmenu

    menu "Memory functions"
        depends on ESP_UTILS_CONF_FILE_SKIP
        config ESP_UTILS_CONF_MEM_GEN_ALLOC_DEFAULT_ENABLE
            bool "Default enable general memory allocation"
            default y
            help
                If enabled, the driver will use general memory allocation by default, otherwise, the driver will use
                `malloc` and `free` by default

        choice ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_CHOICE
            prompt "Select general allocation type"
            default ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_STDLIB

            config ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_STDLIB
                bool "Standard library (malloc, free)"

            config ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_ESP
                bool "ESP (heap_caps_malloc, free)"

            config ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_MICROPYTHON
                bool "MicroPython (mp_malloc, mp_free)"

            config ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_CUSTOM
                bool "Custom (`ESP_UTILS_CONF_MEM_GEN_ALLOC_CUSTOM_MALLOC` and `ESP_UTILS_CONF_MEM_GEN_ALLOC_CUSTOM_FREE`)"
        endchoice

        config ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE
            int
            default 0 if ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_STDLIB
            default 1 if ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_ESP
            default 2 if ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_MICROPYTHON
            default 3 if ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_CUSTOM

        config ESP_UTILS_CONF_MEM_GEN_ALLOC_ESP_ALIGN
            int "General esp memory alignment (bytes)"
            depends on ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_ESP
            default 1
            range 1 1024

        config ESP_UTILS_CONF_MEM_GEN_ALLOC_CUSTOM_INCLUDE
            string "General custom memory header file"
            depends on ESP_UTILS_CONF_MEM_GEN_ALLOC_TYPE_CUSTOM
            default "stdlib.h"
    endmenu
endmenu
