/**
 * 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',
		},
	},

	// 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',
		},
	},
};
