//! Policy builder module for credential requests.
//!
//! This module provides type-safe policy builders for each credential type.
//! All builders use the type-state pattern to ensure compile-time correctness.

mod base;
mod constraints;
mod traits;

pub use base::BaseCredentialPolicy;
pub use constraints::CredentialConstraint;
pub use traits::PolicyBuilder;

#[cfg(feature = "persona-policy")]
mod persona;
#[cfg(feature = "persona-policy")]
pub use persona::{PersonaField, PersonaPolicy};

#[cfg(feature = "verified-email-policy")]
mod verified_email;
#[cfg(feature = "verified-email-policy")]
pub use verified_email::VerifiedEmailPolicy;

#[cfg(feature = "verified-phone-policy")]
mod verified_phone;
#[cfg(feature = "verified-phone-policy")]
pub use verified_phone::VerifiedPhonePolicy;

#[cfg(feature = "verified-persona-policy")]
mod verified_persona;
#[cfg(feature = "verified-persona-policy")]
pub use verified_persona::{VerificationLevel, VerifiedPersonaField, VerifiedPersonaPolicy};

#[cfg(feature = "employment-policy")]
mod employment;
#[cfg(feature = "employment-policy")]
pub use employment::{EmploymentField, EmploymentPolicy, EmploymentStatus};

#[cfg(feature = "trust-policy")]
mod trust;
#[cfg(feature = "trust-policy")]
pub use trust::{TrustLevel, TrustPolicy};

#[cfg(feature = "age-proof-policy")]
mod age_proof;
#[cfg(feature = "age-proof-policy")]
pub use age_proof::{AgeComparison, AgeProofPolicy};

/// Type-state marker: Required fields not yet set
pub struct Incomplete;

/// Type-state marker: Required fields set, ready to build
pub struct Complete;
