/**
 * Comprehensive Error Code System
 * Format: CATEGORY_SPECIFIC_ERROR
 */

export enum ErrorCode {
  // Authentication Errors (AUTH_*)
  AUTH_INVALID_CREDENTIALS = 'AUTH_INVALID_CREDENTIALS',
  AUTH_TOKEN_EXPIRED = 'AUTH_TOKEN_EXPIRED',
  AUTH_TOKEN_INVALID = 'AUTH_TOKEN_INVALID',
  AUTH_INVALID_TOKEN = 'AUTH_INVALID_TOKEN',
  AUTH_DEVICE_NOT_TRUSTED = 'AUTH_DEVICE_NOT_TRUSTED',
  AUTH_REFRESH_TOKEN_EXPIRED = 'AUTH_REFRESH_TOKEN_EXPIRED',
  AUTH_REFRESH_TOKEN_REVOKED = 'AUTH_REFRESH_TOKEN_REVOKED',
  AUTH_UNAUTHORIZED = 'AUTH_UNAUTHORIZED',
  AUTH_INSUFFICIENT_PERMISSIONS = 'AUTH_INSUFFICIENT_PERMISSIONS',
  AUTH_SESSION_EXPIRED = 'AUTH_SESSION_EXPIRED',
  AUTH_EMAIL_NOT_VERIFIED = 'AUTH_EMAIL_NOT_VERIFIED',

  // User Errors (USER_*)
  USER_NOT_FOUND = 'USER_NOT_FOUND',
  USER_ALREADY_EXISTS = 'USER_ALREADY_EXISTS',
  USER_EMAIL_TAKEN = 'USER_EMAIL_TAKEN',
  USER_PHONE_TAKEN = 'USER_PHONE_TAKEN',
  USER_INACTIVE = 'USER_INACTIVE',
  USER_SUSPENDED = 'USER_SUSPENDED',

  // Family Errors (FAMILY_*)
  FAMILY_NOT_FOUND = 'FAMILY_NOT_FOUND',
  FAMILY_ACCESS_DENIED = 'FAMILY_ACCESS_DENIED',
  FAMILY_MEMBER_NOT_FOUND = 'FAMILY_MEMBER_NOT_FOUND',
  FAMILY_ALREADY_MEMBER = 'FAMILY_ALREADY_MEMBER',
  FAMILY_INVALID_SHARE_CODE = 'FAMILY_INVALID_SHARE_CODE',
  FAMILY_SHARE_CODE_EXPIRED = 'FAMILY_SHARE_CODE_EXPIRED',
  FAMILY_SIZE_LIMIT_EXCEEDED = 'FAMILY_SIZE_LIMIT_EXCEEDED',
  FAMILY_CANNOT_REMOVE_CREATOR = 'FAMILY_CANNOT_REMOVE_CREATOR',
  FAMILY_INSUFFICIENT_PERMISSIONS = 'FAMILY_INSUFFICIENT_PERMISSIONS',

  // Child Errors (CHILD_*)
  CHILD_NOT_FOUND = 'CHILD_NOT_FOUND',
  CHILD_ACCESS_DENIED = 'CHILD_ACCESS_DENIED',
  CHILD_LIMIT_EXCEEDED = 'CHILD_LIMIT_EXCEEDED',
  CHILD_INVALID_AGE = 'CHILD_INVALID_AGE',
  CHILD_FUTURE_DATE_OF_BIRTH = 'CHILD_FUTURE_DATE_OF_BIRTH',

  // Activity Errors (ACTIVITY_*)
  ACTIVITY_NOT_FOUND = 'ACTIVITY_NOT_FOUND',
  ACTIVITY_ACCESS_DENIED = 'ACTIVITY_ACCESS_DENIED',
  ACTIVITY_INVALID_TYPE = 'ACTIVITY_INVALID_TYPE',
  ACTIVITY_INVALID_DURATION = 'ACTIVITY_INVALID_DURATION',
  ACTIVITY_OVERLAPPING = 'ACTIVITY_OVERLAPPING',
  ACTIVITY_FUTURE_START_TIME = 'ACTIVITY_FUTURE_START_TIME',
  ACTIVITY_END_BEFORE_START = 'ACTIVITY_END_BEFORE_START',

  // Photo Errors (PHOTO_*)
  PHOTO_NOT_FOUND = 'PHOTO_NOT_FOUND',
  PHOTO_ACCESS_DENIED = 'PHOTO_ACCESS_DENIED',
  PHOTO_INVALID_FORMAT = 'PHOTO_INVALID_FORMAT',
  PHOTO_SIZE_EXCEEDED = 'PHOTO_SIZE_EXCEEDED',
  PHOTO_UPLOAD_FAILED = 'PHOTO_UPLOAD_FAILED',
  PHOTO_STORAGE_LIMIT_EXCEEDED = 'PHOTO_STORAGE_LIMIT_EXCEEDED',

  // Notification Errors (NOTIFICATION_*)
  NOTIFICATION_NOT_FOUND = 'NOTIFICATION_NOT_FOUND',
  NOTIFICATION_ACCESS_DENIED = 'NOTIFICATION_ACCESS_DENIED',
  NOTIFICATION_SEND_FAILED = 'NOTIFICATION_SEND_FAILED',

  // AI Errors (AI_*)
  AI_RATE_LIMIT_EXCEEDED = 'AI_RATE_LIMIT_EXCEEDED',
  AI_QUOTA_EXCEEDED = 'AI_QUOTA_EXCEEDED',
  AI_SERVICE_UNAVAILABLE = 'AI_SERVICE_UNAVAILABLE',
  AI_INVALID_INPUT = 'AI_INVALID_INPUT',
  AI_CONTEXT_TOO_LARGE = 'AI_CONTEXT_TOO_LARGE',
  AI_PROMPT_INJECTION_DETECTED = 'AI_PROMPT_INJECTION_DETECTED',
  AI_UNSAFE_CONTENT_DETECTED = 'AI_UNSAFE_CONTENT_DETECTED',

  // Voice Errors (VOICE_*)
  VOICE_TRANSCRIPTION_FAILED = 'VOICE_TRANSCRIPTION_FAILED',
  VOICE_INVALID_FORMAT = 'VOICE_INVALID_FORMAT',
  VOICE_FILE_TOO_LARGE = 'VOICE_FILE_TOO_LARGE',
  VOICE_DURATION_TOO_LONG = 'VOICE_DURATION_TOO_LONG',

  // Validation Errors (VALIDATION_*)
  VALIDATION_FAILED = 'VALIDATION_FAILED',
  VALIDATION_INVALID_EMAIL = 'VALIDATION_INVALID_EMAIL',
  VALIDATION_INVALID_PHONE = 'VALIDATION_INVALID_PHONE',
  VALIDATION_INVALID_DATE = 'VALIDATION_INVALID_DATE',
  VALIDATION_INVALID_INPUT = 'VALIDATION_INVALID_INPUT',
  VALIDATION_REQUIRED_FIELD = 'VALIDATION_REQUIRED_FIELD',
  VALIDATION_INVALID_FORMAT = 'VALIDATION_INVALID_FORMAT',
  VALIDATION_OUT_OF_RANGE = 'VALIDATION_OUT_OF_RANGE',

  // Database Errors (DB_*)
  DB_CONNECTION_FAILED = 'DB_CONNECTION_FAILED',
  DB_CONNECTION_ERROR = 'DB_CONNECTION_ERROR',
  DB_QUERY_FAILED = 'DB_QUERY_FAILED',
  DB_QUERY_TIMEOUT = 'DB_QUERY_TIMEOUT',
  DB_TRANSACTION_FAILED = 'DB_TRANSACTION_FAILED',
  DB_CONSTRAINT_VIOLATION = 'DB_CONSTRAINT_VIOLATION',
  DB_DUPLICATE_ENTRY = 'DB_DUPLICATE_ENTRY',

  // Storage Errors (STORAGE_*)
  STORAGE_UPLOAD_FAILED = 'STORAGE_UPLOAD_FAILED',
  STORAGE_DOWNLOAD_FAILED = 'STORAGE_DOWNLOAD_FAILED',
  STORAGE_DELETE_FAILED = 'STORAGE_DELETE_FAILED',
  STORAGE_NOT_FOUND = 'STORAGE_NOT_FOUND',
  STORAGE_QUOTA_EXCEEDED = 'STORAGE_QUOTA_EXCEEDED',

  // Rate Limiting (RATE_LIMIT_*)
  RATE_LIMIT_EXCEEDED = 'RATE_LIMIT_EXCEEDED',
  RATE_LIMIT_DAILY_EXCEEDED = 'RATE_LIMIT_DAILY_EXCEEDED',
  RATE_LIMIT_HOURLY_EXCEEDED = 'RATE_LIMIT_HOURLY_EXCEEDED',

  // Subscription Errors (SUBSCRIPTION_*)
  SUBSCRIPTION_REQUIRED = 'SUBSCRIPTION_REQUIRED',
  SUBSCRIPTION_EXPIRED = 'SUBSCRIPTION_EXPIRED',
  SUBSCRIPTION_FEATURE_NOT_AVAILABLE = 'SUBSCRIPTION_FEATURE_NOT_AVAILABLE',
  SUBSCRIPTION_PAYMENT_FAILED = 'SUBSCRIPTION_PAYMENT_FAILED',

  // General Errors (GENERAL_*)
  GENERAL_INTERNAL_ERROR = 'GENERAL_INTERNAL_ERROR',
  GENERAL_NOT_FOUND = 'GENERAL_NOT_FOUND',
  GENERAL_BAD_REQUEST = 'GENERAL_BAD_REQUEST',
  GENERAL_FORBIDDEN = 'GENERAL_FORBIDDEN',
  GENERAL_SERVICE_UNAVAILABLE = 'GENERAL_SERVICE_UNAVAILABLE',
  GENERAL_TIMEOUT = 'GENERAL_TIMEOUT',
  GENERAL_MAINTENANCE_MODE = 'GENERAL_MAINTENANCE_MODE',
}

export const ErrorMessages: Record<ErrorCode, Record<string, string>> = {
  // Authentication Errors
  [ErrorCode.AUTH_INVALID_CREDENTIALS]: {
    'en-US': 'Invalid email or password',
    'es-ES': 'Correo electrónico o contraseña inválidos',
    'fr-FR': 'Email ou mot de passe invalide',
    'pt-BR': 'Email ou senha inválidos',
    'zh-CN': '无效的电子邮件或密码',
  },
  [ErrorCode.AUTH_TOKEN_EXPIRED]: {
    'en-US': 'Your session has expired. Please login again',
    'es-ES': 'Tu sesión ha expirado. Por favor inicia sesión de nuevo',
    'fr-FR': 'Votre session a expiré. Veuillez vous reconnecter',
    'pt-BR': 'Sua sessão expirou. Por favor, faça login novamente',
    'zh-CN': '您的会话已过期。请重新登录',
  },
  [ErrorCode.AUTH_TOKEN_INVALID]: {
    'en-US': 'Invalid authentication token',
    'es-ES': 'Token de autenticación inválido',
    'fr-FR': "Jeton d'authentification invalide",
    'pt-BR': 'Token de autenticação inválido',
    'zh-CN': '无效的身份验证令牌',
  },
  [ErrorCode.AUTH_INVALID_TOKEN]: {
    'en-US': 'Invalid authentication token',
    'es-ES': 'Token de autenticación inválido',
    'fr-FR': "Jeton d'authentification invalide",
    'pt-BR': 'Token de autenticação inválido',
    'zh-CN': '无效的身份验证令牌',
  },
  [ErrorCode.AUTH_INSUFFICIENT_PERMISSIONS]: {
    'en-US': 'Insufficient permissions for this action',
    'es-ES': 'Permisos insuficientes para esta acción',
    'fr-FR': 'Autorisations insuffisantes pour cette action',
    'pt-BR': 'Permissões insuficientes para esta ação',
    'zh-CN': '此操作权限不足',
  },
  [ErrorCode.AUTH_DEVICE_NOT_TRUSTED]: {
    'en-US': 'This device is not trusted. Please verify your identity',
    'es-ES':
      'Este dispositivo no es de confianza. Por favor verifica tu identidad',
    'fr-FR':
      "Cet appareil n'est pas de confiance. Veuillez vérifier votre identité",
    'pt-BR':
      'Este dispositivo não é confiável. Por favor, verifique sua identidade',
    'zh-CN': '此设备不受信任。请验证您的身份',
  },
  [ErrorCode.AUTH_EMAIL_NOT_VERIFIED]: {
    'en-US': 'Please verify your email address to continue',
    'es-ES': 'Por favor verifica tu correo electrónico para continuar',
    'fr-FR': 'Veuillez vérifier votre adresse e-mail pour continuer',
    'pt-BR': 'Por favor, verifique seu endereço de email para continuar',
    'zh-CN': '请验证您的电子邮件地址以继续',
  },

  // User Errors
  [ErrorCode.USER_NOT_FOUND]: {
    'en-US': 'User not found',
    'es-ES': 'Usuario no encontrado',
    'fr-FR': 'Utilisateur non trouvé',
    'pt-BR': 'Usuário não encontrado',
    'zh-CN': '未找到用户',
  },
  [ErrorCode.USER_ALREADY_EXISTS]: {
    'en-US': 'An account with this email already exists',
    'es-ES': 'Ya existe una cuenta con este correo electrónico',
    'fr-FR': 'Un compte avec cet e-mail existe déjà',
    'pt-BR': 'Uma conta com este email já existe',
    'zh-CN': '此电子邮件的帐户已存在',
  },
  [ErrorCode.USER_EMAIL_TAKEN]: {
    'en-US': 'This email address is already in use',
    'es-ES': 'Esta dirección de correo electrónico ya está en uso',
    'fr-FR': 'Cette adresse e-mail est déjà utilisée',
    'pt-BR': 'Este endereço de email já está em uso',
    'zh-CN': '此电子邮件地址已被使用',
  },

  // Family Errors
  [ErrorCode.FAMILY_NOT_FOUND]: {
    'en-US': 'Family not found',
    'es-ES': 'Familia no encontrada',
    'fr-FR': 'Famille non trouvée',
    'pt-BR': 'Família não encontrada',
    'zh-CN': '未找到家庭',
  },
  [ErrorCode.FAMILY_ACCESS_DENIED]: {
    'en-US': "You don't have permission to access this family",
    'es-ES': 'No tienes permiso para acceder a esta familia',
    'fr-FR': "Vous n'avez pas la permission d'accéder à cette famille",
    'pt-BR': 'Você não tem permissão para acessar esta família',
    'zh-CN': '您无权访问此家庭',
  },
  [ErrorCode.FAMILY_INVALID_SHARE_CODE]: {
    'en-US': 'Invalid or expired family share code',
    'es-ES': 'Código de compartir familia inválido o expirado',
    'fr-FR': 'Code de partage familial invalide ou expiré',
    'pt-BR': 'Código de compartilhamento familiar inválido ou expirado',
    'zh-CN': '无效或过期的家庭共享代码',
  },
  [ErrorCode.FAMILY_SIZE_LIMIT_EXCEEDED]: {
    'en-US': 'Family member limit reached. Upgrade to premium for more members',
    'es-ES':
      'Límite de miembros de familia alcanzado. Actualiza a premium para más miembros',
    'fr-FR':
      'Limite de membres de famille atteinte. Passez à premium pour plus de membres',
    'pt-BR':
      'Limite de membros da família atingido. Atualize para premium para mais membros',
    'zh-CN': '家庭成员限制已达到。升级到高级版以获取更多成员',
  },

  // Child Errors
  [ErrorCode.CHILD_NOT_FOUND]: {
    'en-US': 'Child profile not found',
    'es-ES': 'Perfil de niño no encontrado',
    'fr-FR': "Profil d'enfant non trouvé",
    'pt-BR': 'Perfil da criança não encontrado',
    'zh-CN': '未找到儿童资料',
  },
  [ErrorCode.CHILD_LIMIT_EXCEEDED]: {
    'en-US':
      'Child profile limit reached. Upgrade to premium for unlimited children',
    'es-ES':
      'Límite de perfiles de niños alcanzado. Actualiza a premium para niños ilimitados',
    'fr-FR':
      "Limite de profils d'enfants atteinte. Passez à premium pour des enfants illimités",
    'pt-BR':
      'Limite de perfis de crianças atingido. Atualize para premium para crianças ilimitadas',
    'zh-CN': '儿童资料限制已达到。升级到高级版以获取无限儿童',
  },
  [ErrorCode.CHILD_FUTURE_DATE_OF_BIRTH]: {
    'en-US': 'Date of birth cannot be in the future',
    'es-ES': 'La fecha de nacimiento no puede estar en el futuro',
    'fr-FR': 'La date de naissance ne peut pas être dans le futur',
    'pt-BR': 'A data de nascimento não pode estar no futuro',
    'zh-CN': '出生日期不能在未来',
  },

  // Activity Errors
  [ErrorCode.ACTIVITY_NOT_FOUND]: {
    'en-US': 'Activity not found',
    'es-ES': 'Actividad no encontrada',
    'fr-FR': 'Activité non trouvée',
    'pt-BR': 'Atividade não encontrada',
    'zh-CN': '未找到活动',
  },
  [ErrorCode.ACTIVITY_END_BEFORE_START]: {
    'en-US': 'Activity end time must be after start time',
    'es-ES': 'La hora de finalización debe ser posterior a la hora de inicio',
    'fr-FR': "L'heure de fin doit être postérieure à l'heure de début",
    'pt-BR': 'O horário de término deve ser posterior ao horário de início',
    'zh-CN': '活动结束时间必须晚于开始时间',
  },

  // Photo Errors
  [ErrorCode.PHOTO_INVALID_FORMAT]: {
    'en-US': 'Invalid photo format. Please upload JPEG, PNG, or WebP images',
    'es-ES':
      'Formato de foto inválido. Por favor sube imágenes JPEG, PNG o WebP',
    'fr-FR':
      'Format de photo invalide. Veuillez télécharger des images JPEG, PNG ou WebP',
    'pt-BR':
      'Formato de foto inválido. Por favor, envie imagens JPEG, PNG ou WebP',
    'zh-CN': '无效的照片格式。请上传JPEG、PNG或WebP图像',
  },
  [ErrorCode.PHOTO_SIZE_EXCEEDED]: {
    'en-US': 'Photo size exceeds 10MB limit',
    'es-ES': 'El tamaño de la foto excede el límite de 10MB',
    'fr-FR': 'La taille de la photo dépasse la limite de 10 Mo',
    'pt-BR': 'O tamanho da foto excede o limite de 10MB',
    'zh-CN': '照片大小超过10MB限制',
  },

  // AI Errors
  [ErrorCode.AI_RATE_LIMIT_EXCEEDED]: {
    'en-US': 'Too many AI requests. Please try again in a few minutes',
    'es-ES':
      'Demasiadas solicitudes de IA. Por favor intenta de nuevo en unos minutos',
    'fr-FR': 'Trop de demandes IA. Veuillez réessayer dans quelques minutes',
    'pt-BR':
      'Muitas solicitações de IA. Por favor, tente novamente em alguns minutos',
    'zh-CN': 'AI请求过多。请稍后重试',
  },
  [ErrorCode.AI_QUOTA_EXCEEDED]: {
    'en-US':
      'Daily AI quota exceeded. Upgrade to premium for unlimited AI assistance',
    'es-ES':
      'Cuota diaria de IA excedida. Actualiza a premium para asistencia de IA ilimitada',
    'fr-FR':
      "Quota quotidien d'IA dépassé. Passez à premium pour une assistance IA illimitée",
    'pt-BR':
      'Cota diária de IA excedida. Atualize para premium para assistência de IA ilimitada',
    'zh-CN': '每日AI配额已超。升级到高级版以获取无限AI协助',
  },

  // Validation Errors
  [ErrorCode.VALIDATION_INVALID_EMAIL]: {
    'en-US': 'Invalid email address format',
    'es-ES': 'Formato de correo electrónico inválido',
    'fr-FR': "Format d'adresse e-mail invalide",
    'pt-BR': 'Formato de endereço de email inválido',
    'zh-CN': '无效的电子邮件地址格式',
  },
  [ErrorCode.VALIDATION_REQUIRED_FIELD]: {
    'en-US': 'This field is required',
    'es-ES': 'Este campo es obligatorio',
    'fr-FR': 'Ce champ est obligatoire',
    'pt-BR': 'Este campo é obrigatório',
    'zh-CN': '此字段为必填项',
  },

  // Rate Limiting
  [ErrorCode.RATE_LIMIT_EXCEEDED]: {
    'en-US': 'Too many requests. Please slow down',
    'es-ES': 'Demasiadas solicitudes. Por favor, reduce la velocidad',
    'fr-FR': 'Trop de demandes. Veuillez ralentir',
    'pt-BR': 'Muitas solicitações. Por favor, diminua a velocidade',
    'zh-CN': '请求过多。请减慢速度',
  },

  // General Errors
  [ErrorCode.GENERAL_INTERNAL_ERROR]: {
    'en-US': 'Something went wrong. Please try again later',
    'es-ES': 'Algo salió mal. Por favor intenta de nuevo más tarde',
    'fr-FR': "Quelque chose s'est mal passé. Veuillez réessayer plus tard",
    'pt-BR': 'Algo deu errado. Por favor, tente novamente mais tarde',
    'zh-CN': '出了点问题。请稍后重试',
  },
  [ErrorCode.GENERAL_NOT_FOUND]: {
    'en-US': 'The requested resource was not found',
    'es-ES': 'No se encontró el recurso solicitado',
    'fr-FR': "La ressource demandée n'a pas été trouvée",
    'pt-BR': 'O recurso solicitado não foi encontrado',
    'zh-CN': '未找到请求的资源',
  },
  [ErrorCode.GENERAL_SERVICE_UNAVAILABLE]: {
    'en-US': 'Service temporarily unavailable. Please try again later',
    'es-ES':
      'Servicio temporalmente no disponible. Por favor intenta de nuevo más tarde',
    'fr-FR':
      'Service temporairement indisponible. Veuillez réessayer plus tard',
    'pt-BR':
      'Serviço temporariamente indisponível. Por favor, tente novamente mais tarde',
    'zh-CN': '服务暂时不可用。请稍后重试',
  },

  // Add remaining error codes with default English message
  [ErrorCode.AUTH_REFRESH_TOKEN_EXPIRED]: {
    'en-US': 'Refresh token has expired. Please login again',
    'es-ES':
      'El token de actualización ha expirado. Por favor inicia sesión de nuevo',
    'fr-FR': 'Le jeton de rafraîchissement a expiré. Veuillez vous reconnecter',
    'pt-BR': 'O token de atualização expirou. Por favor, faça login novamente',
    'zh-CN': '刷新令牌已过期。请重新登录',
  },
  [ErrorCode.AUTH_REFRESH_TOKEN_REVOKED]: {
    'en-US': 'Refresh token has been revoked',
    'es-ES': 'El token de actualización ha sido revocado',
    'fr-FR': 'Le jeton de rafraîchissement a été révoqué',
    'pt-BR': 'O token de atualização foi revogado',
    'zh-CN': '刷新令牌已被撤销',
  },
  [ErrorCode.AUTH_UNAUTHORIZED]: {
    'en-US': 'Unauthorized access',
    'es-ES': 'Acceso no autorizado',
    'fr-FR': 'Accès non autorisé',
    'pt-BR': 'Acesso não autorizado',
    'zh-CN': '未授权访问',
  },
  [ErrorCode.AUTH_SESSION_EXPIRED]: {
    'en-US': 'Session expired',
    'es-ES': 'Sesión expirada',
    'fr-FR': 'Session expirée',
    'pt-BR': 'Sessão expirada',
    'zh-CN': '会话已过期',
  },
  [ErrorCode.USER_PHONE_TAKEN]: {
    'en-US': 'This phone number is already in use',
    'es-ES': 'Este número de teléfono ya está en uso',
    'fr-FR': 'Ce numéro de téléphone est déjà utilisé',
    'pt-BR': 'Este número de telefone já está em uso',
    'zh-CN': '此电话号码已被使用',
  },
  [ErrorCode.USER_INACTIVE]: {
    'en-US': 'User account is inactive',
    'es-ES': 'La cuenta de usuario está inactiva',
    'fr-FR': 'Le compte utilisateur est inactif',
    'pt-BR': 'A conta do usuário está inativa',
    'zh-CN': '用户帐户未激活',
  },
  [ErrorCode.USER_SUSPENDED]: {
    'en-US': 'User account has been suspended',
    'es-ES': 'La cuenta de usuario ha sido suspendida',
    'fr-FR': 'Le compte utilisateur a été suspendu',
    'pt-BR': 'A conta do usuário foi suspensa',
    'zh-CN': '用户帐户已被暂停',
  },
  [ErrorCode.FAMILY_MEMBER_NOT_FOUND]: {
    'en-US': 'Family member not found',
    'es-ES': 'Miembro de la familia no encontrado',
    'fr-FR': 'Membre de la famille non trouvé',
    'pt-BR': 'Membro da família não encontrado',
    'zh-CN': '未找到家庭成员',
  },
  [ErrorCode.FAMILY_ALREADY_MEMBER]: {
    'en-US': 'Already a member of this family',
    'es-ES': 'Ya eres miembro de esta familia',
    'fr-FR': 'Déjà membre de cette famille',
    'pt-BR': 'Já é membro desta família',
    'zh-CN': '已经是此家庭的成员',
  },
  [ErrorCode.FAMILY_SHARE_CODE_EXPIRED]: {
    'en-US': 'Family share code has expired',
    'es-ES': 'El código de compartir familia ha expirado',
    'fr-FR': 'Le code de partage familial a expiré',
    'pt-BR': 'O código de compartilhamento familiar expirou',
    'zh-CN': '家庭共享代码已过期',
  },
  [ErrorCode.FAMILY_CANNOT_REMOVE_CREATOR]: {
    'en-US': 'Cannot remove family creator',
    'es-ES': 'No se puede eliminar al creador de la familia',
    'fr-FR': 'Impossible de supprimer le créateur de la famille',
    'pt-BR': 'Não é possível remover o criador da família',
    'zh-CN': '无法删除家庭创建者',
  },
  [ErrorCode.FAMILY_INSUFFICIENT_PERMISSIONS]: {
    'en-US': 'Insufficient permissions for this action',
    'es-ES': 'Permisos insuficientes para esta acción',
    'fr-FR': 'Autorisations insuffisantes pour cette action',
    'pt-BR': 'Permissões insuficientes para esta ação',
    'zh-CN': '此操作权限不足',
  },
  [ErrorCode.CHILD_ACCESS_DENIED]: {
    'en-US': 'Access denied to child profile',
    'es-ES': 'Acceso denegado al perfil del niño',
    'fr-FR': "Accès refusé au profil de l'enfant",
    'pt-BR': 'Acesso negado ao perfil da criança',
    'zh-CN': '访问儿童资料被拒绝',
  },
  [ErrorCode.CHILD_INVALID_AGE]: {
    'en-US': 'Invalid child age',
    'es-ES': 'Edad del niño inválida',
    'fr-FR': "Âge de l'enfant invalide",
    'pt-BR': 'Idade da criança inválida',
    'zh-CN': '无效的儿童年龄',
  },
  [ErrorCode.ACTIVITY_ACCESS_DENIED]: {
    'en-US': 'Access denied to activity',
    'es-ES': 'Acceso denegado a la actividad',
    'fr-FR': "Accès refusé à l'activité",
    'pt-BR': 'Acesso negado à atividade',
    'zh-CN': '访问活动被拒绝',
  },
  [ErrorCode.ACTIVITY_INVALID_TYPE]: {
    'en-US': 'Invalid activity type',
    'es-ES': 'Tipo de actividad inválido',
    'fr-FR': "Type d'activité invalide",
    'pt-BR': 'Tipo de atividade inválido',
    'zh-CN': '无效的活动类型',
  },
  [ErrorCode.ACTIVITY_INVALID_DURATION]: {
    'en-US': 'Invalid activity duration',
    'es-ES': 'Duración de actividad inválida',
    'fr-FR': "Durée d'activité invalide",
    'pt-BR': 'Duração da atividade inválida',
    'zh-CN': '无效的活动持续时间',
  },
  [ErrorCode.ACTIVITY_OVERLAPPING]: {
    'en-US': 'Activity overlaps with existing activity',
    'es-ES': 'La actividad se superpone con una actividad existente',
    'fr-FR': "L'activité chevauche une activité existante",
    'pt-BR': 'A atividade se sobrepõe a uma atividade existente',
    'zh-CN': '活动与现有活动重叠',
  },
  [ErrorCode.ACTIVITY_FUTURE_START_TIME]: {
    'en-US': 'Activity start time cannot be in the future',
    'es-ES': 'La hora de inicio de la actividad no puede estar en el futuro',
    'fr-FR': "L'heure de début de l'activité ne peut pas être dans le futur",
    'pt-BR': 'O horário de início da atividade não pode estar no futuro',
    'zh-CN': '活动开始时间不能在未来',
  },
  [ErrorCode.PHOTO_NOT_FOUND]: {
    'en-US': 'Photo not found',
    'es-ES': 'Foto no encontrada',
    'fr-FR': 'Photo non trouvée',
    'pt-BR': 'Foto não encontrada',
    'zh-CN': '未找到照片',
  },
  [ErrorCode.PHOTO_ACCESS_DENIED]: {
    'en-US': 'Access denied to photo',
    'es-ES': 'Acceso denegado a la foto',
    'fr-FR': 'Accès refusé à la photo',
    'pt-BR': 'Acesso negado à foto',
    'zh-CN': '访问照片被拒绝',
  },
  [ErrorCode.PHOTO_UPLOAD_FAILED]: {
    'en-US': 'Photo upload failed',
    'es-ES': 'Fallo en la carga de la foto',
    'fr-FR': 'Échec du téléchargement de la photo',
    'pt-BR': 'Falha no upload da foto',
    'zh-CN': '照片上传失败',
  },
  [ErrorCode.PHOTO_STORAGE_LIMIT_EXCEEDED]: {
    'en-US': 'Photo storage limit exceeded',
    'es-ES': 'Límite de almacenamiento de fotos excedido',
    'fr-FR': 'Limite de stockage de photos dépassée',
    'pt-BR': 'Limite de armazenamento de fotos excedido',
    'zh-CN': '照片存储限制已超',
  },
  [ErrorCode.NOTIFICATION_NOT_FOUND]: {
    'en-US': 'Notification not found',
    'es-ES': 'Notificación no encontrada',
    'fr-FR': 'Notification non trouvée',
    'pt-BR': 'Notificação não encontrada',
    'zh-CN': '未找到通知',
  },
  [ErrorCode.NOTIFICATION_ACCESS_DENIED]: {
    'en-US': 'Access denied to notification',
    'es-ES': 'Acceso denegado a la notificación',
    'fr-FR': 'Accès refusé à la notification',
    'pt-BR': 'Acesso negado à notificação',
    'zh-CN': '访问通知被拒绝',
  },
  [ErrorCode.NOTIFICATION_SEND_FAILED]: {
    'en-US': 'Failed to send notification',
    'es-ES': 'Fallo al enviar la notificación',
    'fr-FR': "Échec de l'envoi de la notification",
    'pt-BR': 'Falha ao enviar notificação',
    'zh-CN': '发送通知失败',
  },
  [ErrorCode.AI_SERVICE_UNAVAILABLE]: {
    'en-US': 'AI service temporarily unavailable',
    'es-ES': 'Servicio de IA temporalmente no disponible',
    'fr-FR': 'Service IA temporairement indisponible',
    'pt-BR': 'Serviço de IA temporariamente indisponível',
    'zh-CN': 'AI服务暂时不可用',
  },
  [ErrorCode.AI_INVALID_INPUT]: {
    'en-US': 'Invalid AI input',
    'es-ES': 'Entrada de IA inválida',
    'fr-FR': 'Entrée IA invalide',
    'pt-BR': 'Entrada de IA inválida',
    'zh-CN': '无效的AI输入',
  },
  [ErrorCode.AI_CONTEXT_TOO_LARGE]: {
    'en-US': 'AI context too large',
    'es-ES': 'Contexto de IA demasiado grande',
    'fr-FR': 'Contexte IA trop volumineux',
    'pt-BR': 'Contexto de IA muito grande',
    'zh-CN': 'AI上下文过大',
  },
  [ErrorCode.AI_PROMPT_INJECTION_DETECTED]: {
    'en-US': 'Potentially unsafe input detected',
    'es-ES': 'Entrada potencialmente insegura detectada',
    'fr-FR': 'Entrée potentiellement dangereuse détectée',
    'pt-BR': 'Entrada potencialmente insegura detectada',
    'zh-CN': '检测到潜在不安全输入',
  },
  [ErrorCode.AI_UNSAFE_CONTENT_DETECTED]: {
    'en-US': 'Unsafe content detected',
    'es-ES': 'Contenido inseguro detectado',
    'fr-FR': 'Contenu dangereux détecté',
    'pt-BR': 'Conteúdo inseguro detectado',
    'zh-CN': '检测到不安全内容',
  },
  [ErrorCode.VOICE_TRANSCRIPTION_FAILED]: {
    'en-US': 'Voice transcription failed',
    'es-ES': 'Fallo en la transcripción de voz',
    'fr-FR': 'Échec de la transcription vocale',
    'pt-BR': 'Falha na transcrição de voz',
    'zh-CN': '语音转录失败',
  },
  [ErrorCode.VOICE_INVALID_FORMAT]: {
    'en-US': 'Invalid voice file format',
    'es-ES': 'Formato de archivo de voz inválido',
    'fr-FR': 'Format de fichier vocal invalide',
    'pt-BR': 'Formato de arquivo de voz inválido',
    'zh-CN': '无效的语音文件格式',
  },
  [ErrorCode.VOICE_FILE_TOO_LARGE]: {
    'en-US': 'Voice file too large',
    'es-ES': 'Archivo de voz demasiado grande',
    'fr-FR': 'Fichier vocal trop volumineux',
    'pt-BR': 'Arquivo de voz muito grande',
    'zh-CN': '语音文件过大',
  },
  [ErrorCode.VOICE_DURATION_TOO_LONG]: {
    'en-US': 'Voice recording too long',
    'es-ES': 'Grabación de voz demasiado larga',
    'fr-FR': 'Enregistrement vocal trop long',
    'pt-BR': 'Gravação de voz muito longa',
    'zh-CN': '语音录制时间过长',
  },
  [ErrorCode.VALIDATION_FAILED]: {
    'en-US': 'Validation failed',
    'es-ES': 'Fallo en la validación',
    'fr-FR': 'Échec de la validation',
    'pt-BR': 'Falha na validação',
    'zh-CN': '验证失败',
  },
  [ErrorCode.VALIDATION_INVALID_PHONE]: {
    'en-US': 'Invalid phone number format',
    'es-ES': 'Formato de número de teléfono inválido',
    'fr-FR': 'Format de numéro de téléphone invalide',
    'pt-BR': 'Formato de número de telefone inválido',
    'zh-CN': '无效的电话号码格式',
  },
  [ErrorCode.VALIDATION_INVALID_DATE]: {
    'en-US': 'Invalid date format',
    'es-ES': 'Formato de fecha inválido',
    'fr-FR': 'Format de date invalide',
    'pt-BR': 'Formato de data inválido',
    'zh-CN': '无效的日期格式',
  },
  [ErrorCode.VALIDATION_INVALID_INPUT]: {
    'en-US': 'Invalid input provided',
    'es-ES': 'Entrada inválida proporcionada',
    'fr-FR': 'Entrée invalide fournie',
    'pt-BR': 'Entrada inválida fornecida',
    'zh-CN': '提供的输入无效',
  },
  [ErrorCode.VALIDATION_INVALID_FORMAT]: {
    'en-US': 'Invalid format',
    'es-ES': 'Formato inválido',
    'fr-FR': 'Format invalide',
    'pt-BR': 'Formato inválido',
    'zh-CN': '无效的格式',
  },
  [ErrorCode.VALIDATION_OUT_OF_RANGE]: {
    'en-US': 'Value out of range',
    'es-ES': 'Valor fuera de rango',
    'fr-FR': 'Valeur hors limites',
    'pt-BR': 'Valor fora do intervalo',
    'zh-CN': '值超出范围',
  },
  [ErrorCode.DB_CONNECTION_FAILED]: {
    'en-US': 'Database connection failed',
    'es-ES': 'Fallo en la conexión a la base de datos',
    'fr-FR': 'Échec de la connexion à la base de données',
    'pt-BR': 'Falha na conexão com o banco de dados',
    'zh-CN': '数据库连接失败',
  },
  [ErrorCode.DB_CONNECTION_ERROR]: {
    'en-US': 'Database connection error',
    'es-ES': 'Error de conexión a la base de datos',
    'fr-FR': 'Erreur de connexion à la base de données',
    'pt-BR': 'Erro de conexão com o banco de dados',
    'zh-CN': '数据库连接错误',
  },
  [ErrorCode.DB_QUERY_TIMEOUT]: {
    'en-US': 'Database query timeout',
    'es-ES': 'Tiempo de espera de consulta de base de datos agotado',
    'fr-FR': "Délai d'attente de la requête de base de données dépassé",
    'pt-BR': 'Tempo limite de consulta do banco de dados esgotado',
    'zh-CN': '数据库查询超时',
  },
  [ErrorCode.DB_QUERY_FAILED]: {
    'en-US': 'Database query failed',
    'es-ES': 'Fallo en la consulta de base de datos',
    'fr-FR': 'Échec de la requête de base de données',
    'pt-BR': 'Falha na consulta do banco de dados',
    'zh-CN': '数据库查询失败',
  },
  [ErrorCode.DB_TRANSACTION_FAILED]: {
    'en-US': 'Database transaction failed',
    'es-ES': 'Fallo en la transacción de base de datos',
    'fr-FR': 'Échec de la transaction de base de données',
    'pt-BR': 'Falha na transação do banco de dados',
    'zh-CN': '数据库事务失败',
  },
  [ErrorCode.DB_CONSTRAINT_VIOLATION]: {
    'en-US': 'Database constraint violation',
    'es-ES': 'Violación de restricción de base de datos',
    'fr-FR': 'Violation de contrainte de base de données',
    'pt-BR': 'Violação de restrição do banco de dados',
    'zh-CN': '数据库约束违规',
  },
  [ErrorCode.DB_DUPLICATE_ENTRY]: {
    'en-US': 'Duplicate entry',
    'es-ES': 'Entrada duplicada',
    'fr-FR': 'Entrée en double',
    'pt-BR': 'Entrada duplicada',
    'zh-CN': '重复条目',
  },
  [ErrorCode.STORAGE_UPLOAD_FAILED]: {
    'en-US': 'Storage upload failed',
    'es-ES': 'Fallo en la carga al almacenamiento',
    'fr-FR': 'Échec du téléchargement vers le stockage',
    'pt-BR': 'Falha no upload para armazenamento',
    'zh-CN': '存储上传失败',
  },
  [ErrorCode.STORAGE_DOWNLOAD_FAILED]: {
    'en-US': 'Storage download failed',
    'es-ES': 'Fallo en la descarga del almacenamiento',
    'fr-FR': 'Échec du téléchargement depuis le stockage',
    'pt-BR': 'Falha no download do armazenamento',
    'zh-CN': '存储下载失败',
  },
  [ErrorCode.STORAGE_DELETE_FAILED]: {
    'en-US': 'Storage delete failed',
    'es-ES': 'Fallo en la eliminación del almacenamiento',
    'fr-FR': 'Échec de la suppression du stockage',
    'pt-BR': 'Falha na exclusão do armazenamento',
    'zh-CN': '存储删除失败',
  },
  [ErrorCode.STORAGE_NOT_FOUND]: {
    'en-US': 'File not found in storage',
    'es-ES': 'Archivo no encontrado en el almacenamiento',
    'fr-FR': 'Fichier non trouvé dans le stockage',
    'pt-BR': 'Arquivo não encontrado no armazenamento',
    'zh-CN': '存储中未找到文件',
  },
  [ErrorCode.STORAGE_QUOTA_EXCEEDED]: {
    'en-US': 'Storage quota exceeded',
    'es-ES': 'Cuota de almacenamiento excedida',
    'fr-FR': 'Quota de stockage dépassé',
    'pt-BR': 'Cota de armazenamento excedida',
    'zh-CN': '存储配额已超',
  },
  [ErrorCode.RATE_LIMIT_DAILY_EXCEEDED]: {
    'en-US': 'Daily rate limit exceeded',
    'es-ES': 'Límite de tasa diaria excedido',
    'fr-FR': 'Limite de débit quotidien dépassée',
    'pt-BR': 'Limite de taxa diária excedido',
    'zh-CN': '每日速率限制已超',
  },
  [ErrorCode.RATE_LIMIT_HOURLY_EXCEEDED]: {
    'en-US': 'Hourly rate limit exceeded',
    'es-ES': 'Límite de tasa por hora excedido',
    'fr-FR': 'Limite de débit horaire dépassée',
    'pt-BR': 'Limite de taxa por hora excedido',
    'zh-CN': '每小时速率限制已超',
  },
  [ErrorCode.SUBSCRIPTION_REQUIRED]: {
    'en-US': 'Premium subscription required',
    'es-ES': 'Suscripción premium requerida',
    'fr-FR': 'Abonnement premium requis',
    'pt-BR': 'Assinatura premium necessária',
    'zh-CN': '需要高级订阅',
  },
  [ErrorCode.SUBSCRIPTION_EXPIRED]: {
    'en-US': 'Subscription has expired',
    'es-ES': 'La suscripción ha expirado',
    'fr-FR': "L'abonnement a expiré",
    'pt-BR': 'A assinatura expirou',
    'zh-CN': '订阅已过期',
  },
  [ErrorCode.SUBSCRIPTION_FEATURE_NOT_AVAILABLE]: {
    'en-US': 'Feature not available in your subscription',
    'es-ES': 'Función no disponible en tu suscripción',
    'fr-FR': 'Fonctionnalité non disponible dans votre abonnement',
    'pt-BR': 'Recurso não disponível em sua assinatura',
    'zh-CN': '您的订阅中不可用此功能',
  },
  [ErrorCode.SUBSCRIPTION_PAYMENT_FAILED]: {
    'en-US': 'Subscription payment failed',
    'es-ES': 'Fallo en el pago de la suscripción',
    'fr-FR': "Échec du paiement de l'abonnement",
    'pt-BR': 'Falha no pagamento da assinatura',
    'zh-CN': '订阅付款失败',
  },
  [ErrorCode.GENERAL_BAD_REQUEST]: {
    'en-US': 'Bad request',
    'es-ES': 'Solicitud incorrecta',
    'fr-FR': 'Mauvaise requête',
    'pt-BR': 'Solicitação incorreta',
    'zh-CN': '错误的请求',
  },
  [ErrorCode.GENERAL_FORBIDDEN]: {
    'en-US': 'Forbidden',
    'es-ES': 'Prohibido',
    'fr-FR': 'Interdit',
    'pt-BR': 'Proibido',
    'zh-CN': '禁止访问',
  },
  [ErrorCode.GENERAL_TIMEOUT]: {
    'en-US': 'Request timeout',
    'es-ES': 'Tiempo de espera de la solicitud agotado',
    'fr-FR': "Délai d'attente de la requête dépassé",
    'pt-BR': 'Tempo limite da solicitação esgotado',
    'zh-CN': '请求超时',
  },
  [ErrorCode.GENERAL_MAINTENANCE_MODE]: {
    'en-US': 'Service under maintenance',
    'es-ES': 'Servicio en mantenimiento',
    'fr-FR': 'Service en maintenance',
    'pt-BR': 'Serviço em manutenção',
    'zh-CN': '服务维护中',
  },
};
