//! # Entropyk Fluids
//!
//! Fluid properties backend for the Entropyk thermodynamic simulation library.
//!
//! This crate provides the abstraction layer for thermodynamic property calculations,
//! allowing the solver to work with different backends (CoolProp, tabular interpolation,
//! test mocks) through a unified trait-based interface.
//!
//! ## Key Components
//!
//! - [`FluidBackend`] - The core trait that all backends implement
//! - [`TestBackend`] - A mock backend for unit testing
//! - [`CoolPropBackend`] - A backend using the CoolProp C++ library
//! - [`FluidError`] - Error types for fluid operations
//! - [`types`] - Core types like `FluidId`, `Property`, `FluidState`, `CriticalPoint`
//! - [`mixture`] - Mixture types for multi-component refrigerants
//!
//! ## Example
//!
//! ```rust
//! use entropyk_fluids::{FluidBackend, FluidId, Property, FluidState, TestBackend};
//! use entropyk_core::{Pressure, Temperature};
//!
//! // Create a test backend for unit testing
//! let backend = TestBackend::new();
//!
//! // Query properties
//! let state = FluidState::from_pt(
//!     Pressure::from_bar(1.0),
//!     Temperature::from_celsius(25.0),
//! );
//!
//! let density = backend.property(
//!     FluidId::new("R134a"),
//!     Property::Density,
//!     state,
//! ).unwrap();
//!
//! // In production use tracing::info! for observability (never println!)
//! ```

#![deny(warnings)]
#![warn(missing_docs)]

pub mod backend;
pub mod cache;
pub mod cached_backend;
pub mod coolprop;
pub mod damped_backend;
pub mod damping;
#[cfg(feature = "dll")]
pub mod dll_backend;
pub mod errors;
pub mod incompressible;
pub mod mixture;
pub mod profiling;
pub mod tabular;
pub mod tabular_backend;
pub mod test_backend;
pub mod types;

pub use backend::FluidBackend;
pub use cached_backend::CachedBackend;
pub use coolprop::CoolPropBackend;
pub use damped_backend::DampedBackend;
pub use damping::{DampingParams, DampingState};
#[cfg(feature = "dll")]
pub use dll_backend::DllBackend;
pub use errors::{FluidError, FluidResult};
pub use incompressible::{IncompFluid, IncompressibleBackend, ValidRange};
pub use mixture::{Mixture, MixtureError};
pub use tabular_backend::TabularBackend;
pub use test_backend::TestBackend;
pub use types::{
    CriticalPoint, Entropy, FluidId, FluidState, Phase, Property, Quality, ThermoState,
};
