cmake_minimum_required(VERSION 3.16)
project(HIS LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)

find_package(Qt6 COMPONENTS Widgets Charts REQUIRED)

# 通用核心逻辑库（模型+业务服务），供 CLI/GUI 共用
set(COMMON_SOURCES
    # Models
    src/models/ward.cpp
    src/models/patient.cpp
    src/models/patient_case.cpp
    src/models/doctor.cpp
    src/models/medicine.cpp
    src/models/check.cpp
    src/models/department.cpp
    src/models/payment.cpp
    src/models/settlement.cpp

    # Core services / composition root
    src/core/his_core.cpp
    src/core/ward_service.cpp
    src/core/patient_service.cpp
    src/core/patient_case_service.cpp
    src/core/report_service.cpp
    src/core/doctor_service.cpp
    src/core/medicine_service.cpp
    src/core/check_service.cpp
    src/core/department_service.cpp
    src/core/payment_service.cpp
    src/core/settlement_service.cpp
    src/core/payment_management_service.cpp

    # Utils
    src/utils/file_manager.cpp
    src/utils/logger.cpp
    src/utils/uuid.cpp
    src/utils/json/JsonParse.cpp
    src/utils/json/JsonValue.cpp
    src/utils/json/JsonSerializer.cpp
    src/utils/json/JsonError.cpp
)

add_library(his_core_lib STATIC ${COMMON_SOURCES})

target_include_directories(his_core_lib PUBLIC
    ${CMAKE_CURRENT_SOURCE_DIR}/include
    ${CMAKE_CURRENT_SOURCE_DIR}/include/utils/json
)

add_executable(his src/main_shell.cpp src/cli/repl_shell.cpp src/cli/table_printer.cpp)
target_link_libraries(his PRIVATE his_core_lib)

add_executable(his_gui 
    gui/main_gui.cpp 
    gui/mainwindow.cpp 
    gui/dialogs/patient_dialog.cpp
    gui/dialogs/department_detail_dialog.cpp
    gui/dialogs/payment_dialog.cpp
    gui/dialogs/payment_management_dialog.cpp
    gui/dialogs/settlement_dialog.cpp
)
target_link_libraries(his_gui PRIVATE his_core_lib Qt6::Widgets Qt6::Charts)

target_include_directories(his_gui PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}/include
    ${CMAKE_CURRENT_SOURCE_DIR}/gui
)

