import vault from "vault-storage"; import type { Chat, Message } from "@/lib/types"; const initializeChats = async () => { const newChatHistory = new Array(); await vault.setItem("chats", newChatHistory); return newChatHistory; }; const getAllChats: () => Promise = async () => { let chats = await vault.getItem("chats"); if (!chats) { chats = await initializeChats(); } return chats; }; const readChat = async (id: string): Promise => { const chats = await getAllChats(); return chats.find((chat) => chat.id === id); }; const createChat = async ( title: string, messages: Array ): Promise => { const chats = await getAllChats(); const newChat: Chat = { id: Date.now().toString(), title, messages, date: new Date().toDateString(), }; chats.push(newChat); await vault.setItem("chats", chats); return newChat; }; const updateChat = async ( id: string, updates: Partial ): Promise => { const chats = await getAllChats(); const index = chats.findIndex((chat) => chat.id === id); if (index === -1) return undefined; chats[index] = { ...chats[index], ...updates }; await vault.setItem("chats", chats); return chats[index]; }; const deleteChat = async (id: string): Promise => { const chats = await getAllChats(); const filteredChats = chats.filter((chat) => chat.id !== id); if (filteredChats.length === chats.length) return false; await vault.setItem("chats", filteredChats); return true; }; const deleteAllChats = async (): Promise => { await initializeChats(); }; const addMessage = async ( chatId: string, message: Omit ): Promise => { const chats = await getAllChats(); const chatIndex = chats.findIndex((chat) => chat.id === chatId); if (chatIndex === -1) return undefined; const id = Date.now().toString(); const newMessage: Message = { ...message, id: id, }; chats[chatIndex].messages.push(newMessage); await vault.setItem("chats", chats); return chats[chatIndex]; }; const removeMessage = async ( chatId: string, messageId: string ): Promise => { const chats = await getAllChats(); const chatIndex = chats.findIndex((chat) => chat.id === chatId); if (chatIndex === -1) return undefined; const messageIndex = chats[chatIndex].messages.findIndex( (message) => message.id === messageId ); if (messageIndex === -1) return undefined; chats[chatIndex].messages.splice(messageIndex, 1); await vault.setItem("chats", chats); return chats[chatIndex]; }; const updateChatName = async ( chatId: string, name: string ): Promise => { const chat = await readChat(chatId); if (!chat) return false; const updatedChat = { ...chat, title: name }; await updateChat(chatId, updatedChat); return true; }; export { getAllChats, createChat, readChat, updateChat, deleteChat, deleteAllChats, addMessage, updateChatName, removeMessage, };