fn main() -> Result<(), Box<dyn std::error::Error>> {
    // NOTE: Tonic 0.14+ uses tonic_prost_build instead of tonic_build
    let config = tonic_prost_build::configure();

    config
        .clone()
        .build_server(true)
        .build_client(true)
        .compile_well_known_types(true)
        .extern_path(".google.protobuf", "::prost_types")
        .type_attribute(".", "#[derive(serde::Serialize, serde::Deserialize)]")
        // Suppress warnings in generated code
        .server_mod_attribute(".", "#[allow(unused_qualifications)]")
        .client_mod_attribute(".", "#[allow(unused_qualifications)]")
        .compile_protos(&["../../proto/ml_training.proto"], &["../../proto"])?;

    // Compile fat-client trading proto for BacktestingService (client only -- for validation pipeline)
    config
        .build_server(false)
        .build_client(true)
        .compile_well_known_types(true)
        .extern_path(".google.protobuf", "::prost_types")
        .type_attribute(".", "#[derive(serde::Serialize, serde::Deserialize)]")
        .server_mod_attribute(".", "#[allow(unused_qualifications)]")
        .client_mod_attribute(".", "#[allow(unused_qualifications)]")
        .compile_protos(
            &["../../proto/fxt_trading.proto"],
            &["../../proto"],
        )?;

    println!("cargo:rerun-if-changed=../../proto/ml_training.proto");
    println!("cargo:rerun-if-changed=../../proto/fxt_trading.proto");

    Ok(())
}
