cmake_minimum_required(VERSION 3.16)

project(ClientChat VERSION 0.1 LANGUAGES CXX)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 查找模块
find_package(Qt6 COMPONENTS 
Core
Protobuf 
Widgets 
Network 
WebSockets 
Multimedia
QUIET)

set(QT_VERSION_MAJOR 6)

# 设置 UI 文件的搜索路径
set(CMAKE_AUTOUIC_SEARCH_PATHS ${CMAKE_CURRENT_SOURCE_DIR}/ui)

# proto文件
file(GLOB PB_FILES
    proto/*.proto
)

# 源文件
# file(GLOB PROJECT_SOURCES
#     include/model/*.h src/model/*.cpp
#     include/network/*.h src/network/*.cpp
#     include/*.h src/*.cpp
#     ui/*.ui
#     resource/qrc/*.qrc
# )

# 显式列出源文件
set(PROJECT_SOURCES
    src/model/datacenter.cpp
    src/network/netclient.cpp
    src/addfrienddialog.cpp
    src/choosefrienddialog.cpp
    src/groupsessiondetailwidget.cpp
    src/historymessagewidget.cpp
    src/loginwidget.cpp
    src/main.cpp
    src/mainwidget.cpp
    src/messageeditarea.cpp
    src/messageshowarea.cpp
    src/phoneloginwidget.cpp
    src/selfinfowidget.cpp
    src/sessiondetailwidget.cpp
    src/sessionfriendarea.cpp
    src/soundrecorder.cpp
    src/toast.cpp
    src/userinfowidget.cpp
    src/verifycodewidget.cpp
)

# 显式列出头文件
set(PROJECT_HEADERS
    include/model/data.h
    include/model/datacenter.h
    include/network/netclient.h
    include/addfrienddialog.h
    include/choosefrienddialog.h
    include/debug.h
    include/groupsessiondetailwidget.h
    include/historymessagewidget.h
    include/loginwidget.h
    include/mainwidget.h
    include/messageeditarea.h
    include/messageshowarea.h
    include/phoneloginwidget.h
    include/selfinfowidget.h
    include/sessiondetailwidget.h
    include/sessionfriendarea.h
    include/soundrecorder.h
    include/toast.h
    include/userinfowidget.h
    include/verifycodewidget.h
)

# 显式列出 UI 文件
set(PROJECT_FORMS
    ui/mainwidget.ui
)

# 显式列出资源文件
set(PROJECT_RESOURCES
    resource.qrc
)

if(ANDROID)
    # Android 平台：附加 Android 可部署资源
    qt_add_executable(ClientChat
        MANUAL_FINALIZATION
        # ${PROJECT_SOURCES}
        ${PROJECT_SOURCES}
        ${PROJECT_HEADERS}
        ${PROJECT_FORMS}
        ${PROJECT_RESOURCES}
    )

    # 指定自定义的 Android 部署目录
    # set_property(TARGET ClientChat APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
else()
    if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)

        qt_add_executable(ClientChat
            MANUAL_FINALIZATION
            # ${PROJECT_SOURCES}
            ${PROJECT_SOURCES}
            ${PROJECT_HEADERS}
            ${PROJECT_FORMS}
            ${PROJECT_RESOURCES}
        )

        qt_add_protobuf(ClientChat PROTO_FILES ${PB_FILES})
    endif()
endif()

# 添加包含目录
target_include_directories(ClientChat PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}/include
    ${CMAKE_CURRENT_SOURCE_DIR}/include/model
    ${CMAKE_CURRENT_SOURCE_DIR}/include/network
)

# 链接动态库
target_link_libraries(ClientChat PRIVATE 
Qt6::Core
Qt${QT_VERSION_MAJOR}::Widgets 
Qt6::Network 
Qt6::WebSockets
Qt6::Multimedia
)