/**
 * 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,
  type SalesforceAccountFieldMap,
  type SalesforceAccountRecord,
  type SalesforceContactRecord,
} from "./contract.js";

// ============================================================================
// 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
  ResidenceCardVerificationStatus,
  ResidenceCardVerification,
  UserProfile, // Alias for User
  AuthenticatedUser, // Alias for authenticated user
  WhmcsClient, // Provider-normalized WHMCS client shape
} from "./schema.js";

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

export {
  userSchema,
  userAuthSchema,
  addressSchema,
  addressFormSchema,
  profileEditFormSchema,
  residenceCardVerificationStatusSchema,
  residenceCardVerificationSchema,

  // Helper functions
  combineToUser, // Domain helper: UserAuth + WhmcsClient → User
  addressFormToRequest,
  profileFormToRequest,
} from "./schema.js";

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

/**
 * Providers namespace contains provider-specific implementations
 *
 * Access as:
 * - Providers.Whmcs.Client (full WHMCS type)
 * - Providers.Whmcs.transformWhmcsClientResponse()
 * - Providers.Portal.mapPrismaUserToUserAuth()
 */
// NOTE: Provider adapters and provider-specific types are intentionally not exported
// from the module root. Import BFF-only provider APIs from:
//   @customer-portal/domain/customer/providers
