use dioxus::prelude::*;
use thiserror::Error;

#[derive(Error, Debug)]
pub enum DashboardError {
    #[error("Database error: {0}")]
    Database(#[from] mongodb::error::Error),

    #[error("HTTP error: {0}")]
    Http(#[from] reqwest::Error),

    #[error("JSON error: {0}")]
    Json(#[from] serde_json::Error),

    #[error("Configuration error: {0}")]
    Config(String),

    #[error("{0}")]
    Other(String),
}

impl From<DashboardError> for ServerFnError {
    fn from(err: DashboardError) -> Self {
        ServerFnError::new(err.to_string())
    }
}

#[cfg(feature = "server")]
impl axum::response::IntoResponse for DashboardError {
    fn into_response(self) -> axum::response::Response {
        (
            axum::http::StatusCode::INTERNAL_SERVER_ERROR,
            self.to_string(),
        )
            .into_response()
    }
}
