# NOTE: VARIABLES

# Define the path to the directory with SQL scripts
set(SQL_SCRIPTS_DIR "${CMAKE_SOURCE_DIR}/core/sql")
set(SQL_DEST_DIR "${CMAKE_CURRENT_BINARY_DIR}/core/sql")

# Define directories for tests
set(TESTS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/tests")
set(TESTS_SOURCES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/tests_sources")

# Specify paths to test files
set(TEST_FILES
    ${TESTS_DIR}/main_test.cpp
    ${TESTS_DIR}/sqlite_database_crud_test.cpp
    ${TESTS_DIR}/sqlite_database_foreign_key_test.cpp
    ${TESTS_DIR}/sqlite_database_trigger_test.cpp
)

# Specify paths to test sources
set(TEST_SOURCES
    ${TESTS_SOURCES_DIR}/sqlite_database.cpp
    ${TESTS_SOURCES_DIR}/sqlite_file_executor.cpp
    ${TESTS_SOURCES_DIR}/sqlite_statement.cpp
    ${TESTS_SOURCES_DIR}/file_reader.cpp
)

# NOTE: OUTPUT

# Output test file paths to console
message(STATUS "Test files: ${TEST_FILES}")
message(STATUS "Test sources: ${TEST_SOURCES}")

# Output variable values to console
message(STATUS "Tests directory: ${TESTS_DIR}")
message(STATUS "Test sources directory: ${TESTS_SOURCES_DIR}")
message(STATUS "SQL scripts source directory: ${SQL_SCRIPTS_DIR}")
message(STATUS "SQL scripts destination directory: ${SQL_DEST_DIR}")

# NOTE: BUILD

# Create the test executable
add_executable(tests_schema ${TEST_FILES} ${TEST_SOURCES})

# Include directories for headers
include_directories(${TESTS_SOURCES_DIR})

# Link the test executable with required libraries
target_link_libraries(tests_schema PRIVATE
    GTest::GTest
    GTest::Main
    SQLite::SQLite3
)

# NOTE: BUILD END

# Copy SQL scripts to the build directory
add_custom_target(copy_sql_files ALL
    COMMAND ${CMAKE_COMMAND} -E make_directory ${SQL_DEST_DIR}
    COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SQL_SCRIPTS_DIR}/*.sql ${SQL_DEST_DIR}
    COMMENT "Copying SQL scripts to ${SQL_DEST_DIR}"
)

# Ensure SQL scripts are copied before running tests
add_dependencies(tests_schema copy_sql_files)

# Pass the SQL scripts path to the tests via a macro
target_compile_definitions(tests_schema PRIVATE SQL_SCRIPTS_PATH="${SQL_DEST_DIR}")

# Register the tests
include(GoogleTest)
gtest_discover_tests(tests_schema)

