use thiserror::Error;
pub type CalibrationResult<T> = Result<T, CalibrationError>;
#[derive(Error, Debug)]
pub enum CalibrationError {
#[error("ColorChecker detection failed: {0}")]
ColorCheckerNotFound(String),
#[error("Patch extraction failed: {0}")]
PatchExtractionFailed(String),
#[error("Invalid patch count: expected {expected}, got {actual}")]
InvalidPatchCount {
expected: usize,
actual: usize,
},
#[error("Profile generation failed: {0}")]
ProfileGenerationFailed(String),
#[error("ICC profile parsing failed: {0}")]
IccParseError(String),
#[error("ICC profile invalid: {0}")]
IccInvalidProfile(String),
#[error("LUT generation failed: {0}")]
LutGenerationFailed(String),
#[error("Measurement data invalid: {0}")]
InvalidMeasurementData(String),
#[error("Display calibration failed: {0}")]
DisplayCalibrationFailed(String),
#[error("White balance failed: {0}")]
WhiteBalanceFailed(String),
#[error("Color temperature estimation failed: {0}")]
TemperatureEstimationFailed(String),
#[error("Gamut mapping failed: {0}")]
GamutMappingFailed(String),
#[error("Chromatic adaptation failed: {0}")]
ChromaticAdaptationFailed(String),
#[error("Color matching failed: {0}")]
ColorMatchingFailed(String),
#[error("Invalid color space: {0}")]
InvalidColorSpace(String),
#[error("Invalid image dimensions: {0}")]
InvalidImageDimensions(String),
#[error(
"Image too small for calibration: minimum {min_width}x{min_height}, got {width}x{height}"
)]
ImageTooSmall {
width: usize,
height: usize,
min_width: usize,
min_height: usize,
},
#[error("Insufficient data for calibration: {0}")]
InsufficientData(String),
#[error("Calibration verification failed: {0}")]
VerificationFailed(String),
#[error("Invalid measurement: {0}")]
InvalidMeasurement(String),
#[error("Numerical instability: {0}")]
NumericalInstability(String),
#[error("I/O error: {0}")]
Io(#[from] std::io::Error),
#[error("LUT error: {0}")]
Lut(#[from] oximedia_lut::LutError),
#[error("CV error: {0}")]
Cv(#[from] oximedia_cv::CvError),
#[error("Core error: {0}")]
Core(#[from] oximedia_core::OxiError),
}