// =============================================================================
// 企微IT智能服务台 — 管理后台 TypeScript 类型定义
// =============================================================================
// 说明：定义管理后台所有数据结构类型，与后端 API 响应对应

// --------------------------------------------------------------------------
// 基础类型
// --------------------------------------------------------------------------

/** API 统一响应格式 */
export interface ApiResponse<T = unknown> {
  code: number
  data: T
  message: string
}

/** 分页列表响应 */
export interface PaginatedData<T> {
  items: T[]
  total?: number
}

// --------------------------------------------------------------------------
// 坐席相关类型
// --------------------------------------------------------------------------

/** 坐席信息 */
export interface Agent {
  id: string
  user_id: string
  name: string
  status: AgentStatus
  role: AgentRole
  skill_tags: string[]
  current_load: number
  max_load: number
  today_resolved?: number
  created_at: string
  updated_at: string
}

/** 坐席状态 */
export type AgentStatus = 'online' | 'offline' | 'busy'

/** 坐席角色 */
export type AgentRole = 'admin' | 'agent'

/** 坐席筛选状态 */
export type AgentFilterStatus = 'all' | 'online' | 'busy' | 'offline'

/** 技能标签枚举 */
export const SKILL_TAGS = ['电脑', '软件', '外设', '网络', '安全', '资产', '其他'] as const
export type SkillTag = (typeof SKILL_TAGS)[number]

/** 创建坐席请求 */
export interface CreateAgentRequest {
  user_id: string
  name: string
  role: AgentRole
  skill_tags: string[]
  max_load: number
}

/** 更新坐席请求 */
export interface UpdateAgentRequest {
  role?: AgentRole
  skill_tags?: string[]
  max_load?: number
}

// --------------------------------------------------------------------------
// 配置项相关类型
// --------------------------------------------------------------------------

/** 配置项值类型 */
export type ConfigValueType = 'boolean' | 'number' | 'json_array' | 'string'

/** 单个配置项 */
export interface ConfigItem {
  key: string
  value: string
  description: string
  value_type: ConfigValueType
}

/** 配置分组 */
export interface ConfigGroup {
  name: string
  key_prefix: string
  items: ConfigItem[]
}

/** 配置项变更日志 */
export interface ConfigChangeLogEntry {
  id: string
  config_key: string
  old_value: string
  new_value: string
  changed_by: string
  changed_by_name: string
  changed_at: string
}

/** 配置更新请求 */
export interface UpdateConfigRequest {
  value: string
}

/** 配置更新响应 */
export interface UpdateConfigResponse {
  key: string
  old_value: string
  new_value: string
  changed_at: string
}

// --------------------------------------------------------------------------
// 仪表盘相关类型
// --------------------------------------------------------------------------

/** 仪表盘概览数据 */
export interface DashboardOverview {
  online_agents: number
  today_conversations: number
  avg_response_time: string
  ai_hit_rate: string
  pending_reviews: number
  system_alerts: SystemAlert[]
  integrations_health: IntegrationHealth[]
}

/** 系统告警 */
export interface SystemAlert {
  type: string
  content: string
  submitter?: string
  time: string
  severity: 'info' | 'warning' | 'danger'
}

/** 集成健康状态 */
export interface IntegrationHealth {
  system: string
  status: 'connected' | 'disconnected' | 'partial' | 'pending'
}

// --------------------------------------------------------------------------
// 集成系统相关类型
// --------------------------------------------------------------------------

/** 集成配置类型（区分三种配置模式） */
export type IntegrationConfigType = 'url_key' | 'access_key' | 'account_password'

/** 集成系统 */
export interface Integration {
  id: string
  name: string
  status: 'connected' | 'disconnected' | 'partial' | 'pending'
  configurable: boolean
  config_type?: IntegrationConfigType  // 配置模式，区分对话框表单
  config: IntegrationConfig | null
}

/** 集成系统配置（联合类型，支持三种模式） */
export interface IntegrationConfig {
  // url_key 模式（Dify / RAGFlow）
  api_url?: string
  api_key_set?: boolean
  // access_key 模式（火绒安全）
  access_key_id_set?: boolean
  access_key_secret_set?: boolean
  base_url?: string | null
  // account_password 模式（联软LV7000）
  api_account_set?: boolean
  api_password_set?: boolean
}

/** 更新集成请求（支持三种模式） */
export interface UpdateIntegrationRequest {
  // url_key 模式（Dify / RAGFlow）
  api_url?: string
  api_key?: string
  // access_key 模式（火绒安全）
  access_key_id?: string
  access_key_secret?: string
  // account_password 模式（联软LV7000）
  api_account?: string
  api_password?: string
  validate_key?: string
  base_url?: string
}

// --------------------------------------------------------------------------
// 快速回复相关类型
// --------------------------------------------------------------------------

/** 快速回复模板 */
export interface QuickReplyTemplate {
  id: string
  category: string
  title: string
  content: string
  variables: string[]
  status: QuickReplyStatus
  version: number
  submitted_by: string
  submitted_by_name: string
  sort_order: number
  created_at: string
  updated_at: string
}

/** 快速回复状态 */
export type QuickReplyStatus = 'draft' | 'pending_review' | 'approved' | 'rejected'

/** 审核操作 */
export type ReviewAction = 'approve' | 'reject'

/** 审核请求 */
export interface ReviewQuickReplyRequest {
  action: ReviewAction
  reason?: string
}

/** 审核响应 */
export interface ReviewQuickReplyResponse {
  id: string
  status: QuickReplyStatus
  version: number
}

/** 快速回复分类 */
export const QUICK_REPLY_CATEGORIES = ['全部', '电脑', '软件', '外设', '网络', '安全', '资产', '其他'] as const
export type QuickReplyCategory = (typeof QUICK_REPLY_CATEGORIES)[number]

// --------------------------------------------------------------------------
// 分配模式相关类型
// --------------------------------------------------------------------------

/** 分配模式 */
export interface AssignmentMode {
  id: string
  name: string
  enabled: boolean
  locked: boolean
  unlock_at?: string
}

/** 分配模式配置 */
export interface AssignmentModeConfig {
  current_mode: string
  modes: AssignmentMode[]
}

/** 更新分配模式请求 */
export interface UpdateAssignmentModeRequest {
  mode: string
}

// --------------------------------------------------------------------------
// 会话监控相关类型
// --------------------------------------------------------------------------

/** 会话监控统计 */
export interface MonitorStats {
  in_progress: number
  queued: number
  resolved_today: number
  alerts: number
}

/** 监控会话 */
export interface MonitorSession {
  id: string
  employee_name: string
  status: string
  assigned_agent_name: string
  urgency_score: number
  created_at: string
  last_message_summary: string
}

/** 监控会话列表响应 */
export interface MonitorSessionsData {
  stats: MonitorStats
  items: MonitorSession[]
}

// --------------------------------------------------------------------------
// 搜索相关类型
// --------------------------------------------------------------------------

/** 搜索结果项 */
export interface SearchResultItem {
  type: 'config' | 'agent' | 'quick_reply'
  id: string
  name: string
  route: string
}

/** 搜索结果 */
export interface SearchResults {
  items: SearchResultItem[]
}

// --------------------------------------------------------------------------
// 终端安全相关类型（火绒数据）
// --------------------------------------------------------------------------

/** 火绒终端基本信息（_list 接口返回，字段名与火绒API一致） */
export interface HuorongTerminal {
  id?: number                   // 内部数据库ID
  client_id: string             // 终端唯一ID（40位十六进制）
  client_name: string           // 客户端名称
  computer_name: string         // 计算机名
  local_ip: string              // 本地IP
  connect_ip: string            // 连接IP
  mac: string                   // MAC地址
  group_id?: number | string    // 分组ID
  os_version: string            // 操作系统版本
  version: string               // 火绒客户端版本
  definitions: string           // 病毒库更新时间
  is_online: boolean            // 在线状态
  last_connect_time?: number    // 最后连接时间（Unix时间戳）
  last_seen_time?: number       // 最后可见时间（Unix时间戳）
  first_appear_time?: number    // 首次出现时间（Unix时间戳）
  // 前端计算/映射字段（非API返回）
  risk_level?: string           // 风险等级：safe/low/medium/high
  virus_count?: number          // 病毒检测数
  leak_count?: number           // 漏洞数量
}

/** 火绒终端详细信息（_info2 接口返回） */
export interface HuorongTerminalDetail {
  client_id: string
  computer_name: string         // 计算机名
  local_ip: string              // 本地IP
  mac: string                   // MAC地址
  os_version: string            // 操作系统版本
  version: string               // 火绒客户端版本
  is_online: boolean            // 在线状态
  last_connect_time?: number    // 最后连接时间（Unix时间戳）
  // 硬件信息（可选，_info2 返回）
  cpu?: string
  memory?: string
  disk?: string
  // 安全状态
  virus_count: number
  leak_count: number
  is_isolated: boolean          // 是否已被网络隔离
  risk_level?: string
}

/** 火绒漏洞终端信息（_leak 接口返回）
 *  注意：_leak 返回的是"存在高危漏洞的终端列表"，字段名与 _list 不同！
 *  - cid（非 client_id）、hostname（非 computer_name）、ip_addr（非 local_ip）
 *  - stat（1=离线,2=在线,3=异常），非 is_online 布尔值
 */
export interface HuorongLeakInfo {
  cid: string                    // 终端唯一ID（_leak中叫cid）
  hostname: string               // 计算机名（_leak中叫hostname）
  client_name: string            // 终端名称
  group_name: string             // 分组名称
  group_id?: number | string     // 分组ID
  ip_addr: string                // 本地IP（_leak中叫ip_addr）
  call_ip: string                // 连接IP（_leak中叫call_ip）
  mac: string                    // MAC地址
  osver: string                  // 操作系统版本（_leak中叫osver）
  os_type: string                // 终端类型
  prodver: string                // 火绒客户端版本（_leak中叫prodver）
  virdb?: number | string        // 病毒库版本（Unix时间戳）
  stat: number                   // 在线状态码: 1=离线 2=在线 3=异常
}

/** 火绒漏洞查询响应额外统计字段 */
export interface HuorongLeakStats {
  all_client: number             // 全部终端数
  risk_client: number            // 高危终端数
}

/** 火绒病毒处理结果 */
export interface HuorongVirusHandleResult {
  success: number                // 处理成功数
  fail: number                   // 处理失败数
  ignored: number                // 暂不处理数
  trusted: number                // 已信任数
}

/** 火绒病毒事件（_virus_events 接口返回） */
export interface HuorongVirusEvent {
  group_id?: number | string     // 分组ID
  client_id: string              // 终端唯一ID
  client_name: string            // 终端名称
  computer_name: string          // 计算机名
  local_ip: string               // 本地IP
  connect_ip: string             // 连接IP
  mac: string                    // MAC地址
  count: number                  // 病毒日志总数
  result?: HuorongVirusHandleResult  // 处理结果统计
}

/** 终端安全统计概览 */
export interface TerminalSecurityStats {
  total_terminals: number      // 终端总数
  online_terminals: number     // 在线终端
  high_risk_terminals: number  // 高危终端
  virus_events_today: number   // 今日病毒事件
  isolated_terminals: number   // 已隔离终端
}

// --------------------------------------------------------------------------
// 角色管理相关类型
// --------------------------------------------------------------------------

/** 角色信息 */
export interface Role {
  id: string
  name: string               // 角色标识：user / agent / admin
  display_name: string       // 显示名称：用户 / 坐席 / 管理员
  description: string | null
  permissions: string[]      // 权限列表，如 ["ticket.create", "conversation.manage"]
  is_default: boolean        // 是否默认角色（user 默认）
  user_count: number | null  // 拥有该角色的用户数
  created_at: string
  updated_at: string
}

/** 用户角色关联 */
export interface UserRole {
  id: string
  employee_id: string        // 企微 UserID
  role_id: string            // 关联角色 ID
  role_name: string          // 角色标识
  role_display_name: string  // 角色显示名称
  source: UserRoleSource     // 分配来源
  assigned_by: string | null // 分配者
  assigned_at: string
  expires_at: string | null  // 过期时间（null = 永不过期）
}

/** 用户角色来源 */
export type UserRoleSource = 'auto' | 'tag' | 'ehr' | 'manual'

/** 角色来源标签映射 */
export const ROLE_SOURCE_LABELS: Record<UserRoleSource, string> = {
  auto: '系统自动',
  tag: '企微标签',
  ehr: 'eHR 岗位',
  manual: '手动分配',
}

/** 角色映射规则 */
export interface RoleMappingRule {
  id: string
  role_id: string            // 目标角色 ID
  role_name: string          // 目标角色标识
  source_type: MappingSourceSource  // 来源类型
  source_value: string       // 来源值（标签名或岗位关键词）
  priority: number           // 优先级（越大越优先）
  is_active: boolean         // 是否启用
  created_at: string
}

/** 映射规则来源类型 */
export type MappingSourceSource = 'wecom_tag' | 'ehr_position'

/** 映射规则来源类型标签 */
export const MAPPING_SOURCE_LABELS: Record<MappingSourceSource, string> = {
  wecom_tag: '企微标签',
  ehr_position: 'eHR 岗位',
}

/** 分配角色请求 */
export interface RoleAssignRequest {
  employee_id: string
  role_name: string
  reason?: string
}

/** 撤销角色请求 */
export interface RoleRevokeRequest {
  employee_id: string
  role_name: string
  reason?: string
}

/** 创建映射规则请求 */
export interface RoleMappingRuleRequest {
  role_name: string
  source_type: MappingSourceSource
  source_value: string
  priority?: number
  is_active?: boolean
}

// --------------------------------------------------------------------------
// 登录相关类型
// --------------------------------------------------------------------------

/** 登录响应 */
export interface LoginResponse {
  agent_info: Agent
  token: string
}
