/**
 * 管理员模块常量定义
 *
 * 功能描述：
 * - 定义管理员模块使用的所有常量
 * - 统一管理配置参数和限制值
 * - 避免魔法数字的使用
 * - 提供类型安全的常量访问
 *
 * 职责分离：
 * - 常量集中管理
 * - 配置参数定义
 * - 限制值设定
 * - 敏感字段标识
 *
 * 最近修改：
 * - 2026-01-08: 代码质量优化 - 添加日志查询限制和请求ID配置常量，补充用户查询限制常量 (修改者: moyin)
 * - 2026-01-08: 功能新增 - 创建管理员模块常量定义文件 (修改者: moyin)
 *
 * @author moyin
 * @version 1.2.0
 * @since 2026-01-08
 * @lastModified 2026-01-08
 */

/**
 * 分页限制常量
 */
export const PAGINATION_LIMITS = {
  /** 默认每页数量 */
  DEFAULT_LIMIT: 20,
  /** 默认偏移量 */
  DEFAULT_OFFSET: 0,
  /** 用户列表最大每页数量 */
  USER_LIST_MAX_LIMIT: 100,
  /** 搜索结果最大每页数量 */
  SEARCH_MAX_LIMIT: 50,
  /** 日志列表最大每页数量 */
  LOG_LIST_MAX_LIMIT: 200,
  /** 批量操作最大数量 */
  BATCH_OPERATION_MAX_SIZE: 100
} as const;

/**
 * 请求ID前缀常量
 */
export const REQUEST_ID_PREFIXES = {
  /** 通用请求 */
  GENERAL: 'req',
  /** 错误请求 */
  ERROR: 'err',
  /** 管理员操作 */
  ADMIN_OPERATION: 'admin',
  /** 数据库操作 */
  DATABASE_OPERATION: 'db',
  /** 健康检查 */
  HEALTH_CHECK: 'health',
  /** 日志操作 */
  LOG_OPERATION: 'log'
} as const;

/**
 * 敏感字段列表
 */
export const SENSITIVE_FIELDS = [
  'password',
  'password_hash',
  'newPassword',
  'oldPassword',
  'token',
  'api_key',
  'secret',
  'private_key',
  'zulipApiKeyEncrypted'
] as const;

/**
 * 日志保留策略常量
 */
export const LOG_RETENTION = {
  /** 默认保留天数 */
  DEFAULT_DAYS: 90,
  /** 最少保留天数 */
  MIN_DAYS: 7,
  /** 最多保留天数 */
  MAX_DAYS: 365,
  /** 敏感操作日志保留天数 */
  SENSITIVE_OPERATION_DAYS: 180
} as const;

/**
 * 操作类型常量
 */
export const OPERATION_TYPES = {
  CREATE: 'CREATE',
  UPDATE: 'UPDATE',
  DELETE: 'DELETE',
  QUERY: 'QUERY',
  BATCH: 'BATCH'
} as const;

/**
 * 目标类型常量
 */
export const TARGET_TYPES = {
  USERS: 'users',
  USER_PROFILES: 'user_profiles',
  ZULIP_ACCOUNTS: 'zulip_accounts',
  ADMIN_LOGS: 'admin_logs'
} as const;

/**
 * 操作结果常量
 */
export const OPERATION_RESULTS = {
  SUCCESS: 'SUCCESS',
  FAILED: 'FAILED'
} as const;

/**
 * 错误码常量
 */
export const ERROR_CODES = {
  BAD_REQUEST: 'BAD_REQUEST',
  UNAUTHORIZED: 'UNAUTHORIZED',
  FORBIDDEN: 'FORBIDDEN',
  NOT_FOUND: 'NOT_FOUND',
  CONFLICT: 'CONFLICT',
  UNPROCESSABLE_ENTITY: 'UNPROCESSABLE_ENTITY',
  TOO_MANY_REQUESTS: 'TOO_MANY_REQUESTS',
  INTERNAL_SERVER_ERROR: 'INTERNAL_SERVER_ERROR',
  BAD_GATEWAY: 'BAD_GATEWAY',
  SERVICE_UNAVAILABLE: 'SERVICE_UNAVAILABLE',
  GATEWAY_TIMEOUT: 'GATEWAY_TIMEOUT',
  UNKNOWN_ERROR: 'UNKNOWN_ERROR'
} as const;

/**
 * HTTP状态码常量
 */
export const HTTP_STATUS = {
  OK: 200,
  CREATED: 201,
  BAD_REQUEST: 400,
  UNAUTHORIZED: 401,
  FORBIDDEN: 403,
  NOT_FOUND: 404,
  CONFLICT: 409,
  UNPROCESSABLE_ENTITY: 422,
  TOO_MANY_REQUESTS: 429,
  INTERNAL_SERVER_ERROR: 500,
  BAD_GATEWAY: 502,
  SERVICE_UNAVAILABLE: 503,
  GATEWAY_TIMEOUT: 504
} as const;

/**
 * 缓存键前缀常量
 */
export const CACHE_KEYS = {
  USER_LIST: 'admin:users:list',
  USER_PROFILE_LIST: 'admin:profiles:list',
  ZULIP_ACCOUNT_LIST: 'admin:zulip:list',
  STATISTICS: 'admin:stats'
} as const;

/**
 * 日志查询限制常量
 */
export const LOG_QUERY_LIMITS = {
  /** 默认日志查询每页数量 */
  DEFAULT_LOG_QUERY_LIMIT: 50,
  /** 敏感操作日志默认查询数量 */
  SENSITIVE_LOG_DEFAULT_LIMIT: 50
} as const;

/**
 * 用户查询限制常量
 */
export const USER_QUERY_LIMITS = {
  /** 用户状态统计查询的最大用户数 */
  MAX_USERS_FOR_STATS: 10000,
  /** 管理员操作历史默认查询数量 */
  ADMIN_HISTORY_DEFAULT_LIMIT: 20
} as const;