/**
 * Webhook 相关类型定义
 */

/**
 * Webhook 状态
 * - 0: 禁用
 * - 1: 启用
 */
export type WebhookStatus = 0 | 1

/**
 * Webhook 状态文本映射
 */
export const WebhookStatusText: Record<WebhookStatus, string> = {
  0: '已禁用',
  1: '已启用',
}

/**
 * Webhook 状态颜色映射（Ant Design Tag 颜色）
 */
export const WebhookStatusColor: Record<WebhookStatus, string> = {
  0: 'default',
  1: 'success',
}

/**
 * Webhook 事件类型
 */
export type WebhookEvent =
  | '*'
  | 'user.registered'
  | 'user.updated'
  | 'user.deleted'
  | 'user.login'
  | 'user.logout'
  | 'user.locked'
  | 'user.password_changed'
  | 'user.password_reset'
  | 'user.totp_enabled'
  | 'user.totp_disabled'
  | 'user.login_failed'
  | 'security.anomaly_detected'

/**
 * Webhook 事件文本映射
 */
export const WebhookEventText: Record<WebhookEvent, string> = {
  '*': '全部事件',
  'user.registered': '用户注册',
  'user.updated': '用户更新',
  'user.deleted': '用户删除',
  'user.login': '用户登录',
  'user.logout': '用户登出',
  'user.locked': '用户锁定',
  'user.password_changed': '密码修改',
  'user.password_reset': '密码重置',
  'user.totp_enabled': '启用 TOTP',
  'user.totp_disabled': '禁用 TOTP',
  'user.login_failed': '登录失败',
  'security.anomaly_detected': '安全异常',
}

/**
 * Webhook 信息
 */
export interface Webhook {
  id: number
  name: string
  url: string
  events: WebhookEvent[]
  status: WebhookStatus
  max_retries: number
  timeout_sec: number
  created_by: number
  created_at: string
  updated_at: string
}

/**
 * Webhook 投递记录
 */
export interface WebhookDelivery {
  id: number
  webhook_id: number
  event_type: string
  payload: string
  status_code: number
  response_body: string
  attempt: number
  success: boolean
  error: string
  delivered_at?: string
  created_at: string
}

/**
 * 创建 Webhook 请求
 */
export interface CreateWebhookRequest {
  /** Webhook 名称 */
  name: string
  /** 目标 URL */
  url: string
  /** 密钥 */
  secret?: string
  /** 订阅的事件列表 */
  events: WebhookEvent[]
}

/**
 * 更新 Webhook 请求
 */
export interface UpdateWebhookRequest {
  name?: string
  url?: string
  events?: WebhookEvent[]
  status?: WebhookStatus
}

/**
 * Webhook 列表查询参数
 */
export interface WebhookListParams {
  /** 页码 */
  page?: number
  /** 每页数量 */
  page_size?: number
  /** 关键词 */
  keyword?: string
  /** 状态 */
  status?: WebhookStatus
}

/**
 * Webhook 投递记录列表查询参数
 */
export interface WebhookDeliveryListParams {
  limit?: number
}
