// =============================================================================
// 企微IT智能服务台 — 快速回复管理状态管理（Pinia Store）
// =============================================================================
// 说明：管理后台快速回复审核数据，支持分类筛选、审核操作（通过/驳回）

import { defineStore } from 'pinia'
import { ref, computed } from 'vue'
import type { QuickReplyTemplate } from '@/types'
import { getPendingQuickReplies, reviewQuickReply as apiReviewQuickReply } from '@/api/admin'

// --------------------------------------------------------------------------
// Store 定义
// --------------------------------------------------------------------------
export const useQuickReplyStore = defineStore('quickReply', () => {
  // ==========================================================================
  // 响应式状态
  // ==========================================================================

  /** 快速回复模板列表 */
  const replies = ref<QuickReplyTemplate[]>([])

  /** 当前选中的分类筛选 */
  const activeCategory = ref<string>('全部')

  /** 是否正在加载 */
  const loading = ref<boolean>(false)

  // ==========================================================================
  // 计算属性
  // ==========================================================================

  /** 按分类筛选后的模板列表 */
  const filteredReplies = computed(() => {
    if (activeCategory.value === '全部') {
      return replies.value
    }
    return replies.value.filter((r) => r.category === activeCategory.value)
  })

  /** 各分类计数 */
  const categoryCounts = computed(() => {
    const counts: Record<string, number> = { '全部': replies.value.length }
    for (const r of replies.value) {
      counts[r.category] = (counts[r.category] || 0) + 1
    }
    return counts
  })

  // ==========================================================================
  // 方法
  // ==========================================================================

  /**
   * 加载待审核快速回复列表
   * @param category - 可选分类筛选
   */
  async function loadReplies(category?: string): Promise<void> {
    loading.value = true
    try {
      const response = await getPendingQuickReplies(category)
      replies.value = response.data.data.items
    } catch (error) {
      console.error('加载快速回复列表失败:', error)
    } finally {
      loading.value = false
    }
  }

  /**
   * 设置分类筛选
   * @param category - 分类名称
   */
  function setCategory(category: string): void {
    activeCategory.value = category
  }

  /**
   * 审核快速回复（通过/驳回）
   * @param id - 模板ID
   * @param action - 审核操作：approve 或 reject
   * @param reason - 驳回原因（驳回时必填）
   */
  async function review(id: string, action: string, reason?: string): Promise<boolean> {
    try {
      await apiReviewQuickReply(id, action, reason)
      // 审核完毕后重新加载列表
      await loadReplies(activeCategory.value === '全部' ? undefined : activeCategory.value)
      return true
    } catch (error) {
      console.error('审核操作失败:', error)
      return false
    }
  }

  // ==========================================================================
  // 返回
  // ==========================================================================
  return {
    // 状态
    replies,
    activeCategory,
    loading,

    // 计算属性
    filteredReplies,
    categoryCounts,

    // 方法
    loadReplies,
    setCategory,
    review,
  }
})
