//! Build script — embeds Windows application resources (icon, metadata).

fn main() {
    let target_os = std::env::var("CARGO_CFG_TARGET_OS").unwrap_or_default();

    if target_os == "windows" {
        // C++ runtime (stdc++, gcc, gcc_eh, pthread) linked statically via .cargo/config.toml
        // using -Wl,-Bstatic. Only Windows system DLLs go here.
        println!("cargo:rustc-link-lib=ws2_32");
        println!("cargo:rustc-link-lib=iphlpapi");
        println!("cargo:rustc-link-lib=winmm");
        println!("cargo:rustc-link-lib=ole32");
        println!("cargo:rustc-link-lib=oleaut32");
    }

    if target_os == "windows" {
        let manifest_dir = std::env::var("CARGO_MANIFEST_DIR").unwrap();
        let icon = format!("{manifest_dir}/assets/Cagire.ico");
        let mut res = winres::WindowsResource::new();
        // Cross-compiling from Unix: use prefixed MinGW tools
        if cfg!(unix) {
            res.set_windres_path("x86_64-w64-mingw32-windres");
            res.set_ar_path("x86_64-w64-mingw32-ar");
            res.set_toolkit_path("/");
        }
        res.set_icon(&icon)
            .set("ProductName", "Cagire")
            .set("FileDescription", "Forth-based music sequencer")
            .set("LegalCopyright", "Copyright (c) 2025 Raphaël Forment");
        res.compile().expect("Failed to compile Windows resources");
        // GNU ld discards unreferenced sections from static archives,
        // so link the resource object directly to ensure .rsrc is kept.
        if cfg!(unix) {
            let out_dir = std::env::var("OUT_DIR").unwrap();
            println!("cargo:rustc-link-arg-bins={out_dir}/resource.o");
        }
    }
}
