# 1. Setup paths and find files
file(GLOB PROTO_FILES "${CMAKE_CURRENT_SOURCE_DIR}/*.proto")

set(GEN_SOURCES "")

# 2. Define the generation logic
# We loop to determine what the output filenames will be
foreach(PROTO_FILE ${PROTO_FILES})
    get_filename_component(FILE_NAME ${PROTO_FILE} NAME_WE)
    set(GEN_C "${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}.pb.c")
    set(GEN_H "${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}.pb.h")

    list(APPEND GEN_SOURCES "${GEN_C}")

    # 3. Guard the build-only commands
    idf_build_get_property(build_requirements __BUILD_REQUIREMENTS_ONLY)
    if(NOT build_requirements)
        find_program(PROTOC_PATH protoc REQUIRED)
        set(OPTIONS_FILE "${CMAKE_CURRENT_SOURCE_DIR}/${FILE_NAME}.options")
        if(EXISTS "${OPTIONS_FILE}")
            set(PROTO_DEPENDS "${PROTO_FILE}" "${OPTIONS_FILE}")
        else()
            set(PROTO_DEPENDS "${PROTO_FILE}")
        endif()
        add_custom_command(
            OUTPUT "${GEN_C}" "${GEN_H}"
            COMMAND "${PROTOC_PATH}"
                    "--nanopb_opt=-I${CMAKE_CURRENT_SOURCE_DIR}"
                    "--nanopb_out=${CMAKE_CURRENT_BINARY_DIR}"
                    "-I${CMAKE_CURRENT_SOURCE_DIR}"
                    "${PROTO_FILE}"
            DEPENDS ${PROTO_DEPENDS}
            COMMENT "Generating Nanopb C files from ${FILE_NAME}.proto"
            VERBATIM
        )
        set_source_files_properties("${GEN_C}" "${GEN_H}" PROPERTIES GENERATED TRUE)
    endif()
endforeach()

# 4. Register the component
# This part must be OUTSIDE the 'if(NOT build_requirements)' block
idf_component_register(
    SRCS "${GEN_SOURCES}"
    INCLUDE_DIRS "." "${CMAKE_CURRENT_BINARY_DIR}"
    REQUIRES nanopb
) 