/**
 * Auth Domain - Contract
 * 
 * Constants and types for the authentication domain.
 * All validated types are derived from schemas (see schema.ts).
 */

// ============================================================================
// Authentication Error Codes
// ============================================================================

export const AUTH_ERROR_CODE = {
  INVALID_CREDENTIALS: "INVALID_CREDENTIALS",
  EMAIL_NOT_VERIFIED: "EMAIL_NOT_VERIFIED",
  ACCOUNT_LOCKED: "ACCOUNT_LOCKED",
  MFA_REQUIRED: "MFA_REQUIRED",
  INVALID_TOKEN: "INVALID_TOKEN",
  TOKEN_EXPIRED: "TOKEN_EXPIRED",
  PASSWORD_TOO_WEAK: "PASSWORD_TOO_WEAK",
  EMAIL_ALREADY_EXISTS: "EMAIL_ALREADY_EXISTS",
  WHMCS_ACCOUNT_NOT_FOUND: "WHMCS_ACCOUNT_NOT_FOUND",
  SALESFORCE_ACCOUNT_NOT_FOUND: "SALESFORCE_ACCOUNT_NOT_FOUND",
  LINKING_FAILED: "LINKING_FAILED",
} as const;

export type AuthErrorCode = (typeof AUTH_ERROR_CODE)[keyof typeof AUTH_ERROR_CODE];

// ============================================================================
// Token Type Constants
// ============================================================================

export const TOKEN_TYPE = {
  BEARER: "Bearer",
} as const;

export type TokenTypeValue = (typeof TOKEN_TYPE)[keyof typeof TOKEN_TYPE];

// ============================================================================
// Gender Constants
// ============================================================================

export const GENDER = {
  MALE: "male",
  FEMALE: "female",
  OTHER: "other",
} as const;

export type GenderValue = (typeof GENDER)[keyof typeof GENDER];

// ============================================================================
// Re-export Types from Schema (Schema-First Approach)
// ============================================================================

export type {
  // Request types
  LoginRequest,
  SignupRequest,
  PasswordResetRequest,
  ResetPasswordRequest,
  SetPasswordRequest,
  ChangePasswordRequest,
  LinkWhmcsRequest,
  ValidateSignupRequest,
  UpdateCustomerProfileRequest,
  AccountStatusRequest,
  SsoLinkRequest,
  CheckPasswordNeededRequest,
  RefreshTokenRequest,
  // Token types
  AuthTokens,
  // Response types
  AuthResponse,
  SignupResult,
  PasswordChangeResult,
  SsoLinkResponse,
  CheckPasswordNeededResponse,
  LinkWhmcsResponse,
  // Error types
  AuthError,
} from './schema';
