/**
 * Authentication Constants
 *
 * Centralized constants for authentication flows
 * Ensures consistency across the application
 *
 * @module lib/constants/auth.constants
 */

/**
 * Error Messages - English
 */
export const AUTH_ERRORS_EN = {
  EMAIL_REQUIRED: "Email address is required",
  EMAIL_INVALID: "Invalid email address format",
  EMAIL_EXISTS: "This email is already registered. Please log in instead.",
  EMAIL_NOT_FOUND: "No account found with this email address",

  OTP_REQUIRED: "Verification code is required",
  OTP_INVALID_FORMAT: "Verification code must be 6 digits",
  OTP_INVALID: "Invalid or expired verification code",
  OTP_EXPIRED: "Verification code has expired. Please request a new one.",
  OTP_MAX_ATTEMPTS:
    "Maximum verification attempts exceeded. Please request a new code.",
  OTP_SEND_FAILED: "Failed to send verification code. Please try again.",

  NAME_REQUIRED: "Full name is required",
  NAME_TOO_SHORT: "Name must be at least 2 characters",

  USER_NOT_FOUND: "User not found",
  ACCOUNT_NOT_VERIFIED: "Email address not verified",
  ACCOUNT_LOCKED: "Account is temporarily locked due to failed login attempts",

  GOOGLE_ACCOUNT: "Please sign in with Google",

  SECURITY_TOKEN_MISSING: "Security token missing. Please refresh the page.",
  INTERNAL_ERROR: "Internal server error. Please try again later.",
} as const;

/**
 * Error Messages - Arabic
 */
export const AUTH_ERRORS_AR = {
  EMAIL_REQUIRED: "البريد الإلكتروني مطلوب",
  EMAIL_INVALID: "صيغة البريد الإلكتروني غير صحيحة",
  EMAIL_EXISTS:
    "هذا البريد الإلكتروني مسجل بالفعل. يرجى تسجيل الدخول بدلاً من ذلك.",
  EMAIL_NOT_FOUND: "لا يوجد حساب بهذا البريد الإلكتروني",

  OTP_REQUIRED: "رمز التحقق مطلوب",
  OTP_INVALID_FORMAT: "رمز التحقق يجب أن يكون 6 أرقام",
  OTP_INVALID: "رمز التحقق غير صحيح أو منتهي الصلاحية",
  OTP_EXPIRED: "انتهت صلاحية رمز التحقق. يرجى طلب رمز جديد.",
  OTP_MAX_ATTEMPTS: "تجاوزت الحد الأقصى لمحاولات التحقق. يرجى طلب رمز جديد.",
  OTP_SEND_FAILED: "فشل إرسال رمز التحقق. يرجى المحاولة مرة أخرى.",

  NAME_REQUIRED: "الاسم الكامل مطلوب",
  NAME_TOO_SHORT: "الاسم يجب أن يكون حرفين على الأقل",

  USER_NOT_FOUND: "المستخدم غير موجود",
  ACCOUNT_NOT_VERIFIED: "البريد الإلكتروني غير مؤكد",
  ACCOUNT_LOCKED: "الحساب مقفل مؤقتاً بسبب محاولات تسجيل دخول فاشلة",

  GOOGLE_ACCOUNT: "يرجى تسجيل الدخول باستخدام Google",

  SECURITY_TOKEN_MISSING: "رمز الأمان مفقود. يرجى تحديث الصفحة.",
  INTERNAL_ERROR: "خطأ داخلي في الخادم. يرجى المحاولة مرة أخرى لاحقاً.",
} as const;

/**
 * Success Messages - English
 */
export const AUTH_SUCCESS_EN = {
  OTP_SENT: "Verification code sent to your email",
  OTP_VERIFIED: "Email verified successfully",
  ACCOUNT_CREATED: "Account created successfully",
  LOGIN_SUCCESS: "Logged in successfully",
  REDIRECTING_TO_LOGIN: "Redirecting to login page...",
} as const;

/**
 * Success Messages - Arabic
 */
export const AUTH_SUCCESS_AR = {
  OTP_SENT: "تم إرسال رمز التحقق إلى بريدك الإلكتروني",
  OTP_VERIFIED: "تم التحقق من البريد الإلكتروني بنجاح",
  ACCOUNT_CREATED: "تم إنشاء الحساب بنجاح",
  LOGIN_SUCCESS: "تم تسجيل الدخول بنجاح",
  REDIRECTING_TO_LOGIN: "جاري التوجيه إلى صفحة تسجيل الدخول...",
} as const;

/**
 * Authentication Configuration
 */
export const AUTH_CONFIG = {
  /** Session token expiry (7 days) */
  SESSION_MAX_AGE: 7 * 24 * 60 * 60,

  /** Failed login attempts before lockout */
  MAX_FAILED_ATTEMPTS: 5,

  /** Account lockout duration (30 minutes) */
  LOCKOUT_DURATION_MINUTES: 30,

  /** Redirect delay for duplicate email (3 seconds) */
  DUPLICATE_REDIRECT_DELAY: 3000,
} as const;

/**
 * Get localized error message
 *
 * @param key - Error message key
 * @param language - Language code
 * @returns Localized error message
 */
export function getErrorMessage(
  key: keyof typeof AUTH_ERRORS_EN,
  language: "ar" | "en" = "en",
): string {
  return language === "ar" ? AUTH_ERRORS_AR[key] : AUTH_ERRORS_EN[key];
}

/**
 * Get localized success message
 *
 * @param key - Success message key
 * @param language - Language code
 * @returns Localized success message
 */
export function getSuccessMessage(
  key: keyof typeof AUTH_SUCCESS_EN,
  language: "ar" | "en" = "en",
): string {
  return language === "ar" ? AUTH_SUCCESS_AR[key] : AUTH_SUCCESS_EN[key];
}
