import type { SessionItem } from "@/stores/chat/chatTypes";
import { create } from "zustand";
import { ServeTalkList } from "@/api/chat";
import { createResettableStore } from "@/stores/registry";

// 轻量级会话列表比较（只比较关键字段）
const isSessionListEqual = (oldList: SessionItem[], newList: SessionItem[]): boolean => {
  if (oldList.length !== newList.length) return false;
  
  // 只比较ID和更新时间，覆盖大部分实际变化场景
  return oldList.every((oldItem, i) => {
    const newItem = newList[i];
    return newItem && 
           oldItem.id === newItem.id && 
           oldItem.updated_at === newItem.updated_at;
  });
};

//会话列表状态
interface SessionListState {
  /** 会话列表 */
  sessionList: SessionItem[];
  /** 设置会话列表 */
  setSessionList: (list: SessionItem[]) => void;

  /** 从接口获取数据 */
  /** 获取会话列表 */
  fetchSessionList: () => Promise<void>;
}

// 工厂：会话列表 store（无持久化，但需要在账号切换时重置）
const createSessionListStore = () =>
  create<SessionListState>((set, get) => ({
    sessionList: [],
    setSessionList: (newSessionList) => {
      const currentList = get().sessionList;
      // 只有数据真正变化时才更新
      if (!isSessionListEqual(currentList, newSessionList)) {
        set({ sessionList: newSessionList });
      }
    },
    fetchSessionList: async () => {
      //TODO: 从接口获取数据
      const data = await ServeTalkList({});
      console.log(data);

      //设置会话列表 - 使用优化后的setSessionList
      const newList = data?.items || [];
      get().setSessionList(newList);
    },
  }));

const resettableSessionList = createResettableStore("sessionListStore", createSessionListStore);
export const useSessionListStore = resettableSessionList.useStore;
