// =============================================================================
// 企微IT智能服务台 — 待办事项状态管理（Pinia Store）
// =============================================================================
// 说明：管理坐席工作台的待办事项列表、当前选中的待办、加载状态
// 核心功能：
//   1. 获取待办列表
//   2. 选中待办事项（联动 conversationStore.workspaceView = 'task'）
//   3. 更新待办状态
// =============================================================================

import { defineStore } from 'pinia'
import { ref, computed } from 'vue'
import type { TodoItemData } from '@/api/todo'
import { getTodoItems, updateTodoStatus } from '@/api/todo'
import { mockTodoListData } from '@/mock/data'

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

  /** 待办事项列表 */
  const todoList = ref<TodoItemData[]>([])

  /** 当前选中的待办事项 */
  const currentTodoItem = ref<TodoItemData | null>(null)

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

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

  /** 紧急待办数量 */
  const urgentCount = computed(() => {
    return todoList.value.filter(t => t.priority === 'urgent').length
  })

  /** 高优先级待办数量 */
  const highCount = computed(() => {
    return todoList.value.filter(t => t.priority === 'high').length
  })

  /** 待处理待办列表（状态为 pending 或 processing） */
  const pendingTodos = computed(() => {
    return todoList.value.filter(t => t.status === 'pending' || t.status === 'processing')
  })

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

  /**
   * 获取待办列表
   * 调用后端 API 获取当前坐席的待办事项
   */
  async function fetchTodoList(): Promise<void> {
    try {
      loading.value = true
      const data = await getTodoItems()
      todoList.value = data.items
    } catch (error) {
      console.error('获取待办列表失败:', error)
      // 使用 mock 数据作为 fallback（开发/演示用）
      if (import.meta.env.DEV) {
        console.warn('[Mock] 使用模拟待办数据')
        todoList.value = mockTodoListData.items
      }
    } finally {
      loading.value = false
    }
  }

  /**
   * 选中待办事项
   * 设置 currentTodoItem，并触发 workspaceView 切换为 'task'
   *
   * @param item - 要选中的待办事项
   */
  function selectTodoItem(item: TodoItemData): void {
    currentTodoItem.value = item
  }

  /**
   * 更新待办状态
   *
   * @param id - 待办事项ID
   * @param status - 新状态
   */
  async function updateTodoItemStatus(id: string, status: string): Promise<void> {
    try {
      await updateTodoStatus(id, status)
      // 刷新列表
      await fetchTodoList()
    } catch (error) {
      console.error('更新待办状态失败:', error)
    }
  }

  // ==========================================================================
  // 返回
  // ==========================================================================
  return {
    // 状态
    todoList,
    currentTodoItem,
    loading,

    // 计算属性
    urgentCount,
    highCount,
    pendingTodos,

    // 方法
    fetchTodoList,
    selectTodoItem,
    updateTodoItemStatus,
  }
})
