cmake_minimum_required(VERSION 3.16)
project(BudgetPro VERSION 1.0 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Qt 6 Configuration
find_package(Qt6 REQUIRED COMPONENTS Widgets Sql)

# Define directories for easier management
set(SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
set(SRC_DIR ${SOURCE_DIR}/src)
set(GUI_DIR ${SOURCE_DIR}/src/gui)
set(WIDGET_DIR ${SOURCE_DIR}/src/gui/widgets)
set(FORMS_DIR ${SOURCE_DIR}/src/gui/forms)
set(MODELS_DIR ${SOURCE_DIR}/src/models)
set(DAO_DIR ${SOURCE_DIR}/src/dao)
set(UTILS_DIR ${SOURCE_DIR}/src/utils)
set(APP_DIR ${SOURCE_DIR}/src/app)
set(ROOT_WIDGET_DIR ${SOURCE_DIR}/widget)

# Include Paths
include_directories(
    ${GUI_DIR}
    ${WIDGET_DIR}
    ${FORMS_DIR}
    ${MODELS_DIR}
    ${DAO_DIR}
    ${UTILS_DIR}
    ${APP_DIR}
    ${ROOT_WIDGET_DIR}
    ${SOURCE_DIR}/data
    ${SOURCE_DIR}/gui/SARibbon
    ${SOURCE_DIR}/gui/qtRibbonGUI
)

# SARibbon Library Integration
# Assuming SARibbon is integrated as a sub-project or pre-compiled
add_subdirectory(gui/SARibbon)

# Collect Sources
file(GLOB_RECURSIVE SOURCES 
    "src/*.cpp" 
    "src/*.h" 
    "widget/*.cpp" 
    "widget/*.h" 
    "utils/*.cpp" 
    "utils/*.h"
)

# Collect Forms
file(GLOB_RECURSIVE FORMS 
    "src/gui/*.ui" 
    "src/gui/forms/*.ui" 
    "widget/*.ui"
)

# Collect Resources
file(GLOB_RECURSIVE RESOURCES 
    "resources/*.qss" 
    "resources/*.svg" 
    "resources/*.png"
    "*.qrc"
)

# Create Executable
add_executable(BudgetPro 
    ${SOURCES} 
    ${FORMS} 
    ${RESOURCES}
)

# Link Libraries
target_link_libraries(BudgetPro PRIVATE Qt6::Widgets Qt6::Sql SARibbonBar)

# OS Specific configurations
if(WIN32)
    set_target_properties(BudgetPro PROPERTIES WIN32_EXECUTABLE TRUE)
    target_compile_definitions(BudgetPro PRIVATE NOMINMAX)
elseif(APPLE)
    set_target_properties(BudgetPro PROPERTIES MACOSX_BUNDLE TRUE)
endif()
