import { computed, ref } from 'vue'
import { listTodos, createTodo as createTodoApi, handleTodo as handleTodoApi, removeTodo as removeTodoApi, type TodoDto } from '@/api/todos'
import { getAuthToken } from '@/api/request'
import { formatBusinessTime } from '@/utils/businessTime'

export type TodoStatus = '待处理' | '已处理'
export interface TodoRecord extends Omit<TodoDto, 'createdAt' | 'operatedAt' | 'handleRemark'> { createdAt: string; operatedAt: string; handleRemark: string }
const cache = ref<TodoRecord[]>([])
const session = ref<string | null>(null)
let requestNo = 0
// 缓存仅属于当前登录会话；切换账号及退出登录后不能重用其他负责人的记录。
const records = computed(() => session.value === getAuthToken() ? cache.value : [])
function map(item: TodoDto): TodoRecord { return { ...item, createdAt: formatBusinessTime(item.createdAt), operatedAt: formatBusinessTime(item.operatedAt), handleRemark: item.handleRemark ?? '' } }
export function clearTodos() { requestNo++; cache.value = []; session.value = '' }
export function useTodos() {
  async function load() {
    const token = getAuthToken(); const current = ++requestNo
    if (session.value !== token) { cache.value = []; session.value = token }
    try { const rows = await listTodos(); if (current === requestNo && token === getAuthToken()) cache.value = rows.map(map) }
    catch (error) { if (current === requestNo) cache.value = []; throw error }
  }
  async function createTodo(payload: { content: string; ownerId: number }) { await createTodoApi(payload); await load() }
  async function handleTodo(id: number, remark: string) { await handleTodoApi(id, remark); await load() }
  async function removeTodo(id: number) { await removeTodoApi(id); cache.value = cache.value.filter(item => item.id !== id) }
  return { records, load, createTodo, handleTodo, removeTodo }
}
