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
        config ESP_UTILS_CONF_ENABLE_CHECK
            bool "Enable check functions"
            default y
            help
                If enabled, the driver will check the function parameters, return value, etc. Disable them will reduce the code size.

        config ESP_UTILS_CONF_CHECK_WITH_ERROR_LOG
            bool "Print log messages on error"
            default y
            depends on ESP_UTILS_CONF_ENABLE_CHECK
            help
                If enabled, the driver will print error message when check failed.

        config ESP_UTILS_CONF_CHECK_WITH_ASSERT
            bool "Assert on error"
            default n
            depends on ESP_UTILS_CONF_ENABLE_CHECK
            help
                If enabled, the driver will assert when check failed.
    endmenu

    menu "Log functions"
        depends on ESP_UTILS_CONF_FILE_SKIP
        config ESP_UTILS_CONF_ENABLE_LOG
            bool "Enable log functions"
            default y
            help
                If enabled, the driver will output log for debugging.

        config ESP_UTILS_CONF_LOG_BUFFER_SIZE
            int "Buffer size for formatting messages"
            depends on ESP_UTILS_CONF_ENABLE_LOG
            default 256

        choice ESP_UTILS_CONF_LOG_LEVEL
            prompt "Select global log level"
            depends on ESP_UTILS_CONF_ENABLE_LOG
            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
        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

        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
        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
