-- LearningSmartClient 主项目配置
-- 使用 xmake includes 模式组织子模块

-- 设置项目基本信息
set_project("LearningSmartClient")
set_version("1.0.0")
set_languages("c++17")

-- 设置编译模式
add_rules("mode.debug", "mode.release")

-- 全局编译选项
if is_plat("windows") then
    add_cxflags("/W3", "/utf-8")
    add_defines("_CRT_SECURE_NO_WARNINGS", "NOMINMAX", "WIN32_LEAN_AND_MEAN")
    add_defines("_SILENCE_CLANG_COROUTINE_MESSAGE")
    set_runtimes("MD")
else
    add_cxflags("-Wall", "-Wextra")
end

-- FFmpeg 全局配置
local ffmpeg_path = os.getenv("FFMPEG_PATH") or "E:/AAA/ffmpeg-7.0.2-full_build-shared"
local ffmpeg_include = ffmpeg_path .. "/include"
local ffmpeg_lib = ffmpeg_path .. "/lib"

-- 全局 FFmpeg 配置函数
function add_ffmpeg_config()
    if is_plat("windows") then
        add_includedirs(ffmpeg_include)
        add_linkdirs(ffmpeg_lib)
        add_links("avcodec", "avformat", "avutil", "swscale", "swresample")
        add_links("avdevice", "avfilter")
    end
end

-- 全局 Qt 配置函数（用于静态库）
function add_qt_config()
    add_rules("qt.static")
    add_frameworks("QtCore", "QtGui", "QtWidgets", "QtNetwork", "QtWebSockets")
    add_frameworks("QtMultimedia", "QtWebSockets", "QtSvg", "QtXml")
    add_frameworks("QtOpenGL", "QtConcurrent")
    if is_plat("windows") then
        add_frameworks("QtWinExtras")
    end
end

-- 使用 includes 引入子模块配置 <mcreference link="https://xmake.io/zh/api/description/global-interfaces.html#includes" index="0">0</mcreference>

includes("libs")

-- 应用程序模块
includes("api")
includes("network")
includes("views")
includes("widgets")

-- 主应用程序目标
target("LearningSmartClient")
    add_rules("qt.widgetapp")
    set_kind("binary")
    if is_plat("windows") then
        add_defines("UNICODE", "_UNICODE")
    end
    -- 设置输出目录
    set_targetdir("$(projectdir)/bin")
    if is_mode("debug") then
        set_targetdir("$(projectdir)/bin_debug")
        set_basename("LearningSmartClientd")
    end
    
    -- 主程序源文件
    add_files("main.cpp")
    add_files("mainwindow.cpp")
    add_files("MainPanel.cpp")
    add_files("appevent.cpp")
    add_files("thememanager.cpp")
    add_files("themesettingswidget.cpp")
    add_files("tlogger.cpp")
    
    -- 头文件
    add_headerfiles("mainwindow.h")
    add_headerfiles("MainPanel.h")
    add_headerfiles("appevent.h")
    add_headerfiles("thememanager.h")
    add_headerfiles("themesettingswidget.h")
    add_headerfiles("tlogger.h")
    
    -- Qt MOC 处理 - 只处理主项目的头文件
    add_files("mainwindow.h", {rules = "qt.moc"})
    add_files("MainPanel.h", {rules = "qt.moc"})
    add_files("appevent.h", {rules = "qt.moc"})
    add_files("thememanager.h", {rules = "qt.moc"})
    add_files("themesettingswidget.h", {rules = "qt.moc"})
    add_files("tlogger.h", {rules = "qt.moc"})
    
    -- 资源文件
    add_files("resources/shared.qrc")
    
    -- 依赖的子模块
    -- add_deps("av_base", "av_codec", "av_capture", "av_muxer", "av_utils")  -- 暂时不使用AV模块
    add_deps("avrecorder_lib")
    add_deps("avplayer2_lib")
    add_deps("utils_lib")
    add_deps("api_lib")
    add_deps("network_lib")
    add_deps("views_lib")
    add_deps("widgets_lib")
    
    -- 第三方库依赖
    add_deps("fmt", "qtpromise", "qwindowkit", "jsonserializer", "advanceddockingsystem")
    add_deps("qwindowkit_widgets")
    -- Qt 配置
    add_qt_config()
    
    -- FFmpeg 配置
    add_ffmpeg_config()
    
    -- Windows 特定链接库
    if is_plat("windows") then
        add_syslinks("shell32", "user32", "gdi32", "ole32", "oleaut32")
        add_syslinks("winmm", "d3d11", "dwmapi", "windowsapp")
        add_syslinks("OpenGL32")
    end
    
    -- 包含目录
    add_includedirs(".")
    add_includedirs("thardware")
    add_files("thardware/*.cpp")
    
target_end()

---- ScreenWall 独立应用程序
--target("ScreenWall")
--    add_rules("qt.widgetapp")
--    set_kind("binary")
    
--    -- 设置输出目录
--    set_targetdir("$(projectdir)/bin")
--    if is_mode("debug") then
--        set_targetdir("$(projectdir)/bin_debug")
--        set_basename("ScreenWalld")
--    end
    
--    -- ScreenWall 源文件
--    add_files("ScreenWall/main.cpp")
--    add_files("ScreenWall/screenwall_simple.cpp")
--    add_files("ScreenWall/screenwall_widget.cpp")
    
--    -- 头文件
--    add_headerfiles("ScreenWall/screenwall_simple.h")
--    add_headerfiles("ScreenWall/screenwall_widget.h")
    
--    -- Qt MOC 处理
--    add_files("ScreenWall/*.h", {rules = "qt.moc"})
    
--    -- 依赖模块
--    add_deps("avrecorder_lib")
--    -- add_deps("av_base", "av_codec", "av_capture", "av_muxer", "av_utils")  -- 暂时不使用AV模块
    
--    -- Qt 配置
--    add_qt_config()
    
--    -- FFmpeg 配置
--    add_ffmpeg_config()
    
--    -- Windows 特定链接库
--    if is_plat("windows") then
--        add_syslinks("shell32", "user32", "gdi32", "ole32", "oleaut32")
--        add_syslinks("winmm", "d3d11", "dwmapi", "windowsapp")
--        add_syslinks("OpenGL32")
--    end
    
--target_end()
