# 获取当前选择的 demo 配置
if(CONFIG_SWEEKAR_DEMO_1)
    set(ACTIVE_DEMO "sweekar_demo1")
elseif(CONFIG_SWEEKAR_DEMO_2)
    set(ACTIVE_DEMO "sweekar_demo2")
elseif(CONFIG_SWEEKAR_DEMO_3)
    set(ACTIVE_DEMO "sweekar_demo3")
elseif(CONFIG_SWEEKAR_DEMO_4)
    set(ACTIVE_DEMO "sweekar_demo4")
elseif(CONFIG_SWEEKAR_DEMO_5)
    set(ACTIVE_DEMO "sweekar_demo5")
elseif(CONFIG_SWEEKAR_DEMO_6)
    set(ACTIVE_DEMO "sweekar_demo6")
elseif(CONFIG_SWEEKAR_DEMO_7)
    set(ACTIVE_DEMO "sweekar_demo7")
endif()

# 初始化全局变量，用于收集各模块的信息
set(MODULE_SRCS)
set(MODULE_INCLUDE_DIRS)
set(MODULE_REQUIRES)
set(MODULE_PRIV_REQUIRES)
set(MODULE_EMBED_TXTFILES)

if(NOT DEFINED CONFIG_SWEEKAR_DEMO_SELECTION)
    set(EARLY_EXPANSION TRUE)
    message(STATUS "Early expansion pass: loading all module requirements")
else()
    set(EARLY_EXPANSION FALSE)
endif()

# ===================================================================
# 执行 Kconfig 自动组装脚本 (在配置阶段自动生成 Kconfig.modules)
# ===================================================================
execute_process(
    COMMAND python3 ${CMAKE_CURRENT_LIST_DIR}/generate_kconfig_modules.py
    WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
    RESULT_VARIABLE generate_kconfig_result
)
if(NOT generate_kconfig_result EQUAL 0)
    message(FATAL_ERROR "Failed to generate Kconfig.modules")
endif()

# ==================== 模块注册区 ====================
# 定义需要扫描的架构层级目录
set(SUBSYSTEM_DIRS 
    "04_hal"
    "05_executors"
    "05_service"
    "06_behaviors"
    "tests"
)

# 扫描并加载所有启用的子模块（依赖各个模块中的 module.cmake）
foreach(dir ${SUBSYSTEM_DIRS})
    file(GLOB MODULE_FILES "${CMAKE_CURRENT_LIST_DIR}/${dir}/*/module.cmake")
    foreach(mod_file ${MODULE_FILES})
        include(${mod_file})
    endforeach()
endforeach()

# sweekar_demos 模块 (单独加载)
# include(${CMAKE_CURRENT_LIST_DIR}/sweekar_demos/module.cmake)

# ===================================================================

if(MODULE_REQUIRES)
    list(REMOVE_DUPLICATES MODULE_REQUIRES)
endif()
if(MODULE_PRIV_REQUIRES)
    list(REMOVE_DUPLICATES MODULE_PRIV_REQUIRES)
endif()

message(STATUS "==== DEBUG ====")
message(STATUS "MODULE_REQUIRES: ${MODULE_REQUIRES}")
message(STATUS "MODULE_SRCS: ${MODULE_SRCS}")
message(STATUS "===============")

idf_component_register(
    SRCS 
        "main.cc" 
        # "tests/test.cc"
        # "tests/korvo_port/korvo_port_runner.cc"
        # "tests/korvo_port/ai_agent.c"
        # "tests/korvo_port/audio_proc.c"
        # "tests/korvo_port/rtc_proc.c"
        # "../managed_components/espressif__zlib/zlib/contrib/minizip/unzip.c"
        # "../managed_components/espressif__zlib/zlib/contrib/minizip/ioapi.c"
        ${MODULE_SRCS}
    INCLUDE_DIRS 
        "." 
        # "../managed_components/espressif__zlib/zlib/contrib/minizip"
        # "05_executors/touch_sensor"
        # "05_executors/aw_touch_sensor"
        ${MODULE_INCLUDE_DIRS}

    REQUIRES
        # lvgl
        # esp_timer  
        # driver
        # esp_driver_i2c
        # esp_driver_i2s
        # esp_event
        # nvs_flash
        # spi_flash
        # esp_driver_gpio
        # spiffs
        # vfs
        # esp_http_server
        # log
        # fatfs
        # bt
        # mbedtls
        # audio_pipeline
        # audio_hal
        # audio_board
        # esp_peripherals
        # audio_stream
        # audio_sal
        # esp-adf-libs
        # espressif__zlib
        ${MODULE_REQUIRES}
    PRIV_REQUIRES
        # esp-qcloud
        ${MODULE_PRIV_REQUIRES}
    EMBED_TXTFILES
        ${MODULE_EMBED_TXTFILES}
)
# 添加 C++ 标准库支持
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 自动创建SPIFFS分区镜像
# 这会在构建时自动生成audio.bin并在烧录时一并烧录
# spiffs_create_partition_image(audio ../spiffs FLASH_IN_PROJECT)

# 添加编译选项来忽略字符串常量转换警告
target_compile_options(${COMPONENT_LIB} PRIVATE -Wno-write-strings)
target_compile_options(${COMPONENT_LIB} PRIVATE -DUSE_FILE32API)


set(LANG_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/assets/lang_config.h")

# 根据 boards 目录内部模块自动匹配当前选择的板卡
include(${CMAKE_CURRENT_LIST_DIR}/02_physical/boards/module.cmake)

if (CONFIG_VOLC_RTC_MODE)
    set(COMPONENT_SRCS ${COMPONENT_SRCS} RtcBotUtils.c)
endif()
target_compile_definitions(${COMPONENT_LIB} PRIVATE IOAPI_NO_64)
