//! # Konduto SDK para Rust
//!
//! SDK não oficial em Rust para a API da Konduto - Plataforma de análise de fraude.
//!
//! ## Características
//!
//! - Cliente HTTP assíncrono com suporte completo à API da Konduto
//! - Tipos fortemente tipados para todas as estruturas de dados
//! - Suporte a todos os endpoints principais (pedidos, blocklist, allowlist, reviewlist)
//! - Tratamento de erros robusto com `thiserror`
//! - Autenticação integrada (Basic Auth)
//! - Métricas automáticas via StatsD (feature opcional)
//! - Validação de dados em tempo de compilação usando `nutype`
//!
//! ## Instalação
//!
//! Adicione ao seu `Cargo.toml`:
//!
//! ```toml
//! [dependencies]
//! konduto-rs = "0.1"
//! tokio = { version = "1", features = ["full"] }
//! ```
//!
//! ## Exemplo Rápido
//!
//! ```no_run
//! use konduto::{KondutoClient, Customer, Order, OrderId, TotalAmount};
//!
//! #[tokio::main]
//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
//!     // Criar cliente (lê KONDUTO_API_KEY do ambiente)
//!     let client = KondutoClient::new()?;
//!
//!     // Construir dados do cliente
//!     let customer = Customer::builder()
//!         .id("CUST123")?
//!         .name("João Silva")?
//!         .email("joao@example.com")?
//!         .build()?;
//!
//!     // Criar pedido para análise
//!     let order = Order::builder()
//!         .id(OrderId::try_new("ORDER123")?)
//!         .total_amount(TotalAmount::new(100.0)?)
//!         .customer(customer)
//!         .build()?;
//!
//!     // Enviar para análise
//!     let response = client.analyze(&order).await?;
//!     println!("Recomendação: {:?}", response.order.recommendation);
//!
//!     Ok(())
//! }
//! ```
//!
//! ## Gerenciando Listas
//!
//! ```no_run
//! use konduto::{KondutoClient, email::Email};
//! use konduto::kind::DecisionListKind;
//! use konduto::sdk::decision_list::http::requests::DecisionListEntryRequest;
//!
//! # async fn example() -> Result<(), Box<dyn std::error::Error>> {
//! let client = KondutoClient::new()?;
//!
//! // Bloquear um email
//! let email = Email::try_from("fraud@example.com")?;
//! let request = DecisionListEntryRequest::email(
//!     DecisionListKind::Blocklist,
//!     email,
//!     None
//! );
//! client.add_to_list(request).await?;
//! # Ok(())
//! # }
//! ```
//!
//! ## Features
//!
//! - `statsd`: Habilita métricas automáticas via StatsD/DogStatsD
//!
//! ## Links
//!
//! - [Documentação da API Konduto](https://docs.konduto.com)
//! - [Repositório GitHub](https://github.com/alefhsousa/konduto-rs)
//! - [Exemplos](https://github.com/alefhsousa/konduto-rs/tree/main/examples)

pub mod environment;
mod errors;
pub mod sdk;
mod supports;
pub mod types;

// Re-exportar os tipos principais
pub use errors::error::{KondutoError, KondutoResult};
pub use sdk::client::konduto_client::KondutoClient;
pub use types::*;

#[cfg(feature = "statsd")]
pub use sdk::metrics::*;
