/**
 * Customer Domain
 * 
 * Main exports:
 * - User: API response type
 * - UserAuth: Portal DB auth state
 * - Address: Address structure (follows billing/subscriptions pattern)
 * 
 * Pattern matches billing and subscriptions domains.
 * 
 * Types are derived from Zod schemas (Schema-First Approach)
 */

// ============================================================================
// Constants
// ============================================================================

export { USER_ROLE, type UserRoleValue } from "./contract";

// ============================================================================
// Domain Types (Clean Names - Public API)
// ============================================================================

export type {
  User,           // API response type (normalized camelCase)
  UserAuth,       // Portal DB auth state
  UserRole,       // "USER" | "ADMIN"
  Address,        // Address structure (not "CustomerAddress")
  AddressFormData, // Address form validation
  ProfileEditFormData, // Profile edit form data
  ProfileDisplayData,  // Profile display data (alias)
  UserProfile,    // Alias for User
  AuthenticatedUser, // Alias for authenticated user
  WhmcsClient,    // Provider-normalized WHMCS client shape
} from "./schema";

// ============================================================================
// Schemas
// ============================================================================

export {
  userSchema,
  userAuthSchema,
  addressSchema,
  addressFormSchema,
  profileEditFormSchema,
  profileDisplayDataSchema,
  
  // Helper functions
  combineToUser,        // Domain helper: UserAuth + WhmcsClient → User
  addressFormToRequest,
  profileFormToRequest,
} from "./schema";

// ============================================================================
// Provider Namespace
// ============================================================================

/**
 * Providers namespace contains provider-specific implementations
 * 
 * Access as:
 * - Providers.Whmcs.Client (full WHMCS type)
 * - Providers.Whmcs.transformWhmcsClientResponse()
 * - Providers.Portal.mapPrismaUserToUserAuth()
 */
export * as Providers from "./providers/index";

// ============================================================================
// Provider Raw Response Types (Selective Exports)
// ============================================================================

/**
 * WHMCS API raw types (request and response)
 * Only exported for BFF integration convenience
 */
export type {
  // Request params
  WhmcsAddClientParams,
  WhmcsValidateLoginParams,
  WhmcsCreateSsoTokenParams,
  // Response types
  WhmcsClientResponse,
  WhmcsAddClientResponse,
  WhmcsValidateLoginResponse,
  WhmcsSsoResponse,
} from "./providers/whmcs/raw.types";

// ============================================================================
// Provider-Specific Types (For Integrations)
// ============================================================================

/**
 * Salesforce integration types
 * Provider-specific, not validated at runtime
 */
export type {
  SalesforceAccountFieldMap,
  SalesforceAccountRecord,
} from "./contract";
