// lcdm-boltzmann/src/lib.rs

use lcdm_core::CanonicalParams;

pub use lcdm_core::spec::AccuracyPreset;

/// Trait for a Boltzmann solver backend.
///
/// Implementations are expected to take a set of canonical cosmological parameters
/// and an accuracy preset, then return the computed transfer functions / spectra
/// packaged in a `BoltzmannOutput`.
pub trait BoltzmannEngine {
    /// Run the Boltzmann solver with the given parameters and accuracy settings.
    ///
    /// # Parameters
    /// - `params`: Canonical (input) cosmological parameters.
    /// - `accuracy`: Accuracy / performance trade-off preset.
    ///
    /// # Returns
    /// - `Ok(BoltzmannOutput)` on success.
    /// - `Err(String)` with an error message if the solver fails.
    fn compute(
        &self,
        params: &CanonicalParams,
        accuracy: AccuracyPreset,
    ) -> Result<BoltzmannOutput, String>;
}

/// Container for Boltzmann solver outputs.
///
/// This is currently a placeholder; it will eventually contain background evolution
/// tables, transfer functions, and derived observables (e.g., matter power spectrum).
pub struct BoltzmannOutput {
    /// Background evolution results (placeholder).
    pub background: (),

    /// Power spectrum and related outputs (placeholder).
    pub power_spectrum: (),
}
