use std::fs;
use std::path::PathBuf;
use crate::errors::error::KondutoError;

pub mod context;

pub use context::TestContext;

pub struct FixtureLoader;

impl FixtureLoader {
    /// Carrega o conteúdo de um arquivo JSON da pasta de fixtures
    pub fn load(filename: &str) -> String {
        let mut path = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
        path.push("src/supports/tests/fixtures");
        path.push(format!("{}.json", filename));

        fs::read_to_string(&path).unwrap_or_else(|_| panic!("Falha ao ler fixture em: {:?}", path))
    }
}

/// Helper para assertir sucesso em respostas da API
///
/// Este helper simplifica testes ao extrair o valor de sucesso ou fazer panic com mensagem clara.
///
/// # Exemplo
///
/// ```ignore
/// let response = assert_api_success(client.get_order("ORDER123").await);
/// assert_eq!(response.status, OrderStatus::Approved);
/// ```
#[cfg(test)]
pub fn assert_api_success<T>(result: Result<T, KondutoError>) -> T
where
    T: std::fmt::Debug,
{
    match result {
        Ok(success) => success,
        Err(err) => panic!("Expected API success, got error: {:?}", err),
    }
}
