// =============================================================================
// 企微IT智能服务台 — 快速回复模板 API 调用模块
// =============================================================================
// 说明：封装与快速回复模板相关的所有 HTTP 请求
// 对应后端 API：/api/quick-replies
// 包括：获取模板列表、创建模板、更新模板、删除模板
// =============================================================================

import apiClient from './index'
import type { AxiosResponse } from 'axios'

// --------------------------------------------------------------------------
// TypeScript 类型定义 — 与后端 Schema 保持一致
// --------------------------------------------------------------------------

/** 快速回复模板对象（对应后端 QuickReplyResponse） */
export interface QuickReply {
  /** 模板ID */
  id: string
  /** 分类：账号/网络/软件/硬件/通用 */
  category: string
  /** 模板标题 */
  title: string
  /** 模板内容（支持 {employee_name} 等变量） */
  content: string
  /** 可用变量列表 */
  variables: string[]
  /** 排序权重 */
  sort_order: number
  /** 创建时间 */
  created_at: string
  /** 更新时间 */
  updated_at: string
}

/** 快速回复列表响应 */
export interface QuickReplyListData {
  /** 模板列表 */
  items: QuickReply[]
}

/** 创建模板参数 */
export interface QuickReplyCreateParams {
  /** 分类（默认"通用"） */
  category?: string
  /** 模板标题 */
  title: string
  /** 模板内容 */
  content: string
  /** 可用变量列表 */
  variables?: string[]
  /** 排序权重 */
  sort_order?: number
}

/** 更新模板参数（所有字段可选） */
export interface QuickReplyUpdateParams {
  /** 分类 */
  category?: string
  /** 模板标题 */
  title?: string
  /** 模板内容 */
  content?: string
  /** 可用变量列表 */
  variables?: string[]
  /** 排序权重 */
  sort_order?: number
}

// --------------------------------------------------------------------------
// API 函数
// --------------------------------------------------------------------------

/**
 * 获取快速回复模板列表
 * 支持按分类过滤，按 sort_order 排序
 *
 * @param category - 按分类过滤（可选）
 * @returns 模板列表
 */
export async function getQuickReplies(category?: string): Promise<QuickReplyListData> {
  const params: Record<string, string> = {}
  if (category) {
    params.category = category
  }
  const response: AxiosResponse = await apiClient.get('/quick-replies', { params })
  return response.data.data
}

/**
 * 创建快速回复模板
 *
 * @param data - 创建参数
 * @returns 创建的模板
 */
export async function createQuickReply(data: QuickReplyCreateParams): Promise<QuickReply> {
  const response: AxiosResponse = await apiClient.post('/quick-replies', data)
  return response.data.data
}

/**
 * 更新快速回复模板
 * 只更新传入的字段（部分更新）
 *
 * @param templateId - 模板ID
 * @param data - 更新参数
 * @returns 更新后的模板
 */
export async function updateQuickReply(templateId: string, data: QuickReplyUpdateParams): Promise<QuickReply> {
  const response: AxiosResponse = await apiClient.put(`/quick-replies/${templateId}`, data)
  return response.data.data
}

/**
 * 删除快速回复模板
 *
 * @param templateId - 模板ID
 * @returns 无数据
 */
export async function deleteQuickReply(templateId: string): Promise<void> {
  await apiClient.delete(`/quick-replies/${templateId}`)
}

// --------------------------------------------------------------------------
// 坐席备注 API（与快速回复在同一模块方便管理）
// 对应后端 API：/api/agent-notes
// --------------------------------------------------------------------------

/** 备注对象 */
export interface AgentNote {
  /** 备注ID */
  id: string
  /** 所属会话ID */
  conversation_id: string
  /** 坐席ID */
  agent_id: string
  /** 备注内容 */
  content: string
  /** 创建时间 */
  created_at: string
  /** 更新时间 */
  updated_at: string
}

/** 备注列表响应 */
export interface AgentNoteListData {
  /** 备注列表 */
  items: AgentNote[]
}

/**
 * 获取员工的所有备注
 * 通过员工ID查找其所有会话的备注
 *
 * @param employeeId - 员工企微 UserID
 * @returns 备注列表
 */
export async function getAgentNotes(employeeId: string): Promise<AgentNoteListData> {
  const response: AxiosResponse = await apiClient.get(`/agent-notes/${employeeId}`)
  return response.data.data
}

/**
 * 添加坐席备注
 *
 * @param conversationId - 会话ID
 * @param agentId - 坐席ID
 * @param content - 备注内容
 * @returns 创建的备注
 */
export async function createAgentNote(
  conversationId: string,
  agentId: string,
  content: string
): Promise<AgentNote> {
  const response: AxiosResponse = await apiClient.post('/agent-notes', {
    conversation_id: conversationId,
    agent_id: agentId,
    content,
  })
  return response.data.data
}

/**
 * 更新坐席备注
 *
 * @param noteId - 备注ID
 * @param content - 新的备注内容
 * @returns 更新后的备注
 */
export async function updateAgentNote(noteId: string, content: string): Promise<AgentNote> {
  const response: AxiosResponse = await apiClient.put(`/agent-notes/${noteId}`, {
    content,
  })
  return response.data.data
}

/**
 * 删除坐席备注
 *
 * @param noteId - 备注ID
 */
export async function deleteAgentNote(noteId: string): Promise<void> {
  await apiClient.delete(`/agent-notes/${noteId}`)
}
