/**
 * Authentication & Authorization Error Catalog
 *
 * Defines all authentication and authorization related errors.
 */

import { ErrorCategory, ErrorEntry } from './types';

export const AUTH_ERRORS: Record<string, ErrorEntry> = {
	// Authentication errors
	INVALID_CREDENTIALS: {
		code: 'INVALID_CREDENTIALS',
		httpStatus: 401,
		category: ErrorCategory.AUTHENTICATION,
		severity: 'high',
		message: {
			vi: 'Thông tin đăng nhập không hợp lệ',
			en: 'Invalid credentials',
		},
	},
	ACCOUNT_LOCKED: {
		code: 'ACCOUNT_LOCKED',
		httpStatus: 403,
		category: ErrorCategory.AUTHENTICATION,
		severity: 'high',
		message: {
			vi: 'Tài khoản đã bị khóa',
			en: 'Account is locked',
		},
	},
	ACCOUNT_INACTIVE: {
		code: 'ACCOUNT_INACTIVE',
		httpStatus: 403,
		category: ErrorCategory.AUTHENTICATION,
		severity: 'high',
		message: {
			vi: 'Tài khoản chưa được kích hoạt',
			en: 'Account is inactive',
		},
	},
	ACCOUNT_NOT_SETUP: {
		code: 'ACCOUNT_NOT_SETUP',
		httpStatus: 403,
		category: ErrorCategory.AUTHENTICATION,
		severity: 'high',
		message: {
			vi: 'Tài khoản chưa được thiết lập',
			en: 'Account is not set up',
		},
	},
	OAUTH_ONLY_ACCOUNT: {
		code: 'OAUTH_ONLY_ACCOUNT',
		httpStatus: 403,
		category: ErrorCategory.AUTHENTICATION,
		severity: 'high',
		message: {
			vi: 'Tài khoản này chỉ đăng nhập qua OAuth',
			en: 'This account can only login via OAuth',
		},
	},
	EMAIL_NOT_VERIFIED: {
		code: 'EMAIL_NOT_VERIFIED',
		httpStatus: 403,
		category: ErrorCategory.AUTHENTICATION,
		severity: 'medium',
		message: {
			vi: 'Email chưa được xác thực. Vui lòng kiểm tra hộp thư và xác nhận liên kết xác thực.',
			en: 'Email is not verified. Please check your inbox and confirm the verification link.',
		},
	},
	VERIFICATION_TOKEN_INVALID: {
		code: 'VERIFICATION_TOKEN_INVALID',
		httpStatus: 400,
		category: ErrorCategory.AUTHENTICATION,
		severity: 'medium',
		message: {
			vi: 'Liên kết xác thực không hợp lệ hoặc đã được sử dụng.',
			en: 'Verification link is invalid or has already been used.',
		},
	},
	VERIFICATION_TOKEN_EXPIRED: {
		code: 'VERIFICATION_TOKEN_EXPIRED',
		httpStatus: 400,
		category: ErrorCategory.AUTHENTICATION,
		severity: 'medium',
		message: {
			vi: 'Liên kết xác thực đã hết hạn. Vui lòng yêu cầu gửi lại email xác thực.',
			en: 'Verification link has expired. Please request a new verification email.',
		},
	},
	VERIFICATION_RESEND_COOLDOWN: {
		code: 'VERIFICATION_RESEND_COOLDOWN',
		httpStatus: 429,
		category: ErrorCategory.AUTHENTICATION,
		severity: 'low',
		message: {
			vi: 'Vui lòng đợi một chút trước khi yêu cầu gửi lại email xác thực.',
			en: 'Please wait before requesting another verification email.',
		},
	},
	USER_ALREADY_VERIFIED: {
		code: 'USER_ALREADY_VERIFIED',
		httpStatus: 400,
		category: ErrorCategory.AUTHENTICATION,
		severity: 'low',
		message: {
			vi: 'Email này đã được xác thực trước đó. Bạn có thể đăng nhập ngay bây giờ.',
			en: 'This email has already been verified. You may log in now.',
		},
	},

	// Token errors
	TOKEN_EXPIRED: {
		code: 'TOKEN_EXPIRED',
		httpStatus: 401,
		category: ErrorCategory.AUTHENTICATION,
		severity: 'high',
		message: {
			vi: 'Token đã hết hạn',
			en: 'Token has expired',
		},
	},
	TOKEN_INVALID: {
		code: 'TOKEN_INVALID',
		httpStatus: 401,
		category: ErrorCategory.AUTHENTICATION,
		severity: 'high',
		message: {
			vi: 'Token không hợp lệ',
			en: 'Invalid token',
		},
	},
	TOKEN_REVOKED: {
		code: 'TOKEN_REVOKED',
		httpStatus: 401,
		category: ErrorCategory.AUTHENTICATION,
		severity: 'high',
		message: {
			vi: 'Token đã bị thu hồi',
			en: 'Token has been revoked',
		},
	},

	// Session/Device errors
	SESSION_EXPIRED: {
		code: 'SESSION_EXPIRED',
		httpStatus: 401,
		category: ErrorCategory.AUTHENTICATION,
		severity: 'high',
		message: {
			vi: 'Phiên làm việc đã hết hạn',
			en: 'Session has expired',
		},
	},
	SESSION_REVOKED: {
		code: 'SESSION_REVOKED',
		httpStatus: 401,
		category: ErrorCategory.AUTHENTICATION,
		severity: 'high',
		message: {
			vi: 'Phiên làm việc đã bị thu hồi',
			en: 'Session has been revoked',
		},
	},
	DEVICE_MISMATCH: {
		code: 'DEVICE_MISMATCH',
		httpStatus: 403,
		category: ErrorCategory.AUTHENTICATION,
		severity: 'high',
		message: {
			vi: 'Thiết bị không khớp',
			en: 'Device mismatch',
		},
	},
	MISSING_DEVICE_ID: {
		code: 'MISSING_DEVICE_ID',
		httpStatus: 401,
		category: ErrorCategory.AUTHENTICATION,
		severity: 'high',
		message: {
			vi: 'Thiếu thông tin thiết bị',
			en: 'Missing device ID',
		},
	},

	// Authorization errors
	UNAUTHORIZED: {
		code: 'UNAUTHORIZED',
		httpStatus: 401,
		category: ErrorCategory.AUTHORIZATION,
		severity: 'medium',
		message: {
			vi: 'Bạn chưa được xác thực',
			en: 'Unauthorized',
		},
	},
	FORBIDDEN: {
		code: 'FORBIDDEN',
		httpStatus: 403,
		category: ErrorCategory.AUTHORIZATION,
		severity: 'medium',
		message: {
			vi: 'Bạn không có quyền truy cập',
			en: 'Forbidden',
		},
	},
	INSUFFICIENT_PERMISSIONS: {
		code: 'INSUFFICIENT_PERMISSIONS',
		httpStatus: 403,
		category: ErrorCategory.AUTHORIZATION,
		severity: 'medium',
		message: {
			vi: 'Quyền hạn không đủ',
			en: 'Insufficient permissions',
		},
	},
};
