-- MinGW 编译配置
set_toolchains("mingw")

add_requires("libsdl2", {configs = {shared = true}})
add_requires("libsdl2_image", {configs = {shared = true}})
add_requires("libsdl2_mixer", {configs = {shared = true}})
add_requires("libsdl2_ttf", {configs = {shared = true}})
add_requires("glm")
add_requires("zlib")
add_requires("squirrel")

target("Frostbite2D")
    set_kind("binary")
    add_files(path.join(os.projectdir(), "Frostbite2D/src/**.cpp"))
    add_files(path.join(os.projectdir(), "Frostbite2D/src/**.c"))
    add_includedirs(path.join(os.projectdir(), "Frostbite2D/include"))

    add_files(path.join(os.projectdir(), "Game/src/**.cpp"))
    add_includedirs(path.join(os.projectdir(), "Game/include"))

    add_packages("libsdl2")
    add_packages("libsdl2_image")
    add_packages("libsdl2_mixer")
    add_packages("libsdl2_ttf")
    add_packages("glm")
    add_packages("zlib")
    add_packages("squirrel")

    -- 复制 assets 目录到输出目录
    after_build(function (target)
        -- 复制 assets 目录
        local assets_dir = path.join(os.projectdir(), "Game/assets")
        local output_dir = target:targetdir()
        local target_assets_dir = path.join(output_dir, "assets")

        if os.isdir(assets_dir) then
            os.rm(target_assets_dir)
            os.cp(assets_dir, output_dir)
            print("Copy assets directory: " .. assets_dir .. " -> " .. target_assets_dir)
        end

        -- 复制所有依赖的 DLL (Windows 平台)
        if is_plat("mingw") or is_plat("windows") then
            -- 复制所有包的 DLL 文件
            local all_pkgs = {"libsdl2", "libsdl2_image", "libsdl2_mixer"}
            for _, pkg_name in ipairs(all_pkgs) do
                local pkg = target:pkg(pkg_name)
                if pkg then
                    local libfiles = pkg:get("libfiles")
                    if libfiles then
                        for _, libfile in ipairs(libfiles) do
                            if libfile:endswith(".dll") then
                                local target_dll = path.join(output_dir, path.filename(libfile))
                                os.cp(libfile, target_dll)
                                print("Copy DLL: " .. path.filename(libfile))
                            end
                        end
                    end
                end
            end

            -- 从 xmake 包目录复制所有可能的依赖 DLL
            local user_profile = os.getenv("USERPROFILE") or ""
            local packages_dir = path.join(user_profile, ".xmake/packages/l")
            
            local common_dll_patterns = {
                path.join(packages_dir, "libogg/**/*.dll"),
                path.join(packages_dir, "libvorbis/**/*.dll"),
                path.join(packages_dir, "libvorbisfile/**/*.dll"),
                path.join(packages_dir, "libmpg123/**/*.dll"),
                path.join(packages_dir, "libflac/**/*.dll"),
                path.join(packages_dir, "libsndfile/**/*.dll"),
                path.join(packages_dir, "libmodplug/**/*.dll"),
                path.join(packages_dir, "opus/**/*.dll"),
                path.join(packages_dir, "opusfile/**/*.dll"),
                path.join(packages_dir, "**/*.dll")
            }

            for _, dll_pattern in ipairs(common_dll_patterns) do
                local dll_files = os.files(dll_pattern)
                for _, dll_file in ipairs(dll_files) do
                    local dll_name = path.filename(dll_file)
                    local target_dll = path.join(output_dir, dll_name)
                    if not os.isfile(target_dll) then
                        os.cp(dll_file, target_dll)
                        print("Copy dependency DLL: " .. dll_name)
                    end
                end
            end
        end
    end)
target_end()
