-- AV 框架子模块配置
-- 此文件被主项目通过 includes("AV") 引入

-- 公共基础配置函数
function add_av_common_config()
    add_includedirs(".", {public = true})
    add_includedirs("code", {public = true})
end

-- 基础库
target("av_base")
    set_kind("static")
    if is_plat("windows") then
        add_defines("UNICODE", "_UNICODE")
    end
    add_files("code/base/*.cpp")
    add_headerfiles("code/base/*.h")
    add_av_common_config()
    
    -- FFmpeg配置
    add_ffmpeg_config()
    
    -- 平台特定设置
    if is_plat("windows") then
        add_syslinks("ws2_32", "winmm")
    else
        add_syslinks("pthread")
    end

-- 编解码库
target("av_codec")
    set_kind("static")
    if is_plat("windows") then
        add_defines("UNICODE", "_UNICODE")
    end
    add_files("code/codec/*.cpp")
    add_headerfiles("code/codec/*.h")
    add_av_common_config()
    add_deps("av_base")
    
    -- FFmpeg配置
    add_ffmpeg_config()

-- 捕获库
target("av_capture")
    set_kind("static")
    if is_plat("windows") then
        add_defines("UNICODE", "_UNICODE")
    end
    add_files("code/capture/*.cpp")
    add_headerfiles("code/capture/*.h")
    add_av_common_config()
    add_deps("av_base")
    
    -- FFmpeg配置
    add_ffmpeg_config()

-- 混流库
target("av_muxer")
    set_kind("static")
    if is_plat("windows") then
        add_defines("UNICODE", "_UNICODE")
    end
    add_files("code/muxer/*.cpp")
    add_headerfiles("code/muxer/*.h")
    add_av_common_config()
    add_deps("av_base")
    
    -- FFmpeg配置
    add_ffmpeg_config()

-- 工具库
target("av_utils")
    set_kind("static")
    if is_plat("windows") then
        add_defines("UNICODE", "_UNICODE")
    end
    add_files("code/utils/*.cpp")
    add_headerfiles("code/utils/*.h")
    add_av_common_config()
    add_deps("av_base")
    
    -- FFmpeg配置
    add_ffmpeg_config()

-- 完整的AV框架库 - 主项目依赖的统一接口
target("av_framework")
    set_kind("static")
    if is_plat("windows") then
        add_defines("UNICODE", "_UNICODE")
    end
    add_deps("av_base", "av_codec", "av_capture", "av_muxer", "av_utils")
    add_av_common_config()
    
    -- 导出所有子模块的接口
    add_headerfiles("code/**/*.h")

-- 播放器库
target("av_player")
    set_kind("static")
    if is_plat("windows") then
        add_defines("UNICODE", "_UNICODE")
    end
    add_files("code/player/*.cpp")
    add_headerfiles("code/player/*.h")
    add_av_common_config()
    add_deps("av_base", "av_codec")
    
    -- Qt 配置
    add_qt_config()
    
    -- FFmpeg配置
    add_ffmpeg_config()

-- 录制器库
target("av_recorder")
    set_kind("static")
    if is_plat("windows") then
        add_defines("UNICODE", "_UNICODE")
    end
    add_files("code/recorder/*.cpp")
    add_headerfiles("code/recorder/*.h")
    add_av_common_config()
    add_deps("av_base", "av_codec", "av_capture", "av_muxer")
    
    -- Qt 配置
    add_qt_config()
    
    -- FFmpeg配置
    add_ffmpeg_config()

-- 基础测试程序
target("test_basic")
    set_kind("binary")
    if is_plat("windows") then
        add_defines("UNICODE", "_UNICODE")
    end
    add_files("test_basic.cpp")
    add_deps("av_base")
    add_common_config()
    
    -- FFmpeg配置
    add_ffmpeg_config()

-- 编解码测试程序
target("test_codec")
    set_kind("binary")
    if is_plat("windows") then
        add_defines("UNICODE", "_UNICODE")
    end
    add_files("test_codec.cpp")
    add_deps("av_codec")
    add_common_config()
    
    -- FFmpeg配置
    add_ffmpeg_config()

-- 解码器测试程序
target("test_decoder")
    set_kind("binary")
    if is_plat("windows") then
        add_defines("UNICODE", "_UNICODE")
    end
    add_files("test_decoder.cpp")
    add_deps("av_codec")
    add_common_config()
    
    -- FFmpeg配置
    add_ffmpeg_config()
    

-- 音频编码器测试程序
target("test_audio_encoder")
    set_kind("binary")
    if is_plat("windows") then
        add_defines("UNICODE", "_UNICODE")
    end
    add_files("test_audio_encoder.cpp")
    add_deps("av_codec")
    add_common_config()
    
    -- FFmpeg配置
    add_ffmpeg_config()


-- 窗口采集测试程序
target("test_window_capture")
    set_kind("binary")
    if is_plat("windows") then
        add_defines("UNICODE", "_UNICODE")
    end
    add_files("test_window_capture.cpp")
    add_deps("av_capture")
    add_common_config()
    
    -- FFmpeg配置
    add_ffmpeg_config()

-- 工具类测试程序
target("test_utils")
    set_kind("binary")
    if is_plat("windows") then
        add_defines("UNICODE", "_UNICODE")
    end
    add_files("test_utils.cpp")
    add_deps("av_utils")
    add_common_config()
    
    -- FFmpeg配置
    add_ffmpeg_config()

-- 混流器测试程序
target("test_muxer")
    set_kind("binary")
    if is_plat("windows") then
        add_defines("UNICODE", "_UNICODE")
    end
    add_files("test_muxer.cpp")
    add_deps("av_muxer")
    add_common_config()
    
    -- FFmpeg配置
    add_ffmpeg_config()

-- 音频调试测试程序
target("test_audio_debug")
    set_kind("binary")
    if is_plat("windows") then
        add_defines("UNICODE", "_UNICODE")
    end
    add_files("test_audio_debug.cpp")
    add_deps("av_base", "av_codec", "av_utils")
    add_files("code/player/player_core_v2.cpp")
    add_files("code/player/audio_output.cpp")
    add_files("code/player/thread_manager.cpp")
    add_headerfiles("code/player/*.h")
    add_common_config()
    
    add_rules("qt.widgetapp")
    add_frameworks("QtCore", "QtWidgets", "QtMultimedia")
    
    -- FFmpeg配置
    add_ffmpeg_config()

-- 带UI的播放器测试程序
target("test_player_with_ui")
    add_rules("qt.widgetapp")
    if is_plat("windows") then
        add_defines("UNICODE", "_UNICODE")
    end
    add_common_config()
    add_files("test_player_with_ui.cpp", {rules = "qt.moc"})
    add_deps("av_base", "av_codec", "av_utils")
    add_files("code/player/*.cpp")
    add_headerfiles("code/player/*.h")
    add_files("code/player/*.h", {rules = "qt.moc"})
    add_frameworks("QtNetwork", "QtGui", "QtCore", "QtWidgets", "QtMultimedia", "QtOpenGL")
    
    -- FFmpeg配置
    add_ffmpeg_config()
    
    
-- 混流器测试程序
target("test_seek_pause_fixed")
    set_kind("binary")
    add_rules("qt.widgetapp")
    if is_plat("windows") then
        add_defines("UNICODE", "_UNICODE")
    end
    add_files("test_seek_pause_fixed.cpp")
    add_deps("av_base", "av_codec", "av_utils")
    add_common_config()
    add_frameworks("QtNetwork", "QtGui", "QtCore", "QtWidgets", "QtMultimedia", "QtOpenGL")
    
    -- FFmpeg配置
    add_ffmpeg_config()
