import { SendMessageDTO, ChatResponse, ChatMessage, ConversationSummary, GetMessagesOptions, CreateEventDTO, UpdateEventDTO, EventAction, RecurringDeleteMode, } from "@calchat/shared"; import { ApiClient } from "./ApiClient"; interface ConfirmEventRequest { proposalId: string; action: EventAction; event?: CreateEventDTO; eventId?: string; updates?: UpdateEventDTO; deleteMode?: RecurringDeleteMode; occurrenceDate?: string; } interface RejectEventRequest { proposalId: string; } export const ChatService = { sendMessage: async (data: SendMessageDTO): Promise => { return ApiClient.post("/chat/message", data); }, confirmEvent: async ( conversationId: string, messageId: string, proposalId: string, action: EventAction, event?: CreateEventDTO, eventId?: string, updates?: UpdateEventDTO, deleteMode?: RecurringDeleteMode, occurrenceDate?: string, ): Promise => { const body: ConfirmEventRequest = { proposalId, action, event, eventId, updates, deleteMode, occurrenceDate, }; return ApiClient.post( `/chat/confirm/${conversationId}/${messageId}`, body, ); }, rejectEvent: async ( conversationId: string, messageId: string, proposalId: string, ): Promise => { const body: RejectEventRequest = { proposalId }; return ApiClient.post( `/chat/reject/${conversationId}/${messageId}`, body, ); }, getConversations: async (): Promise => { return ApiClient.get("/chat/conversations"); }, getConversation: async ( id: string, options?: GetMessagesOptions, ): Promise => { const params = new URLSearchParams(); if (options?.before) params.append("before", options.before); if (options?.limit) params.append("limit", options.limit.toString()); const queryString = params.toString(); const url = `/chat/conversations/${id}${queryString ? `?${queryString}` : ""}`; return ApiClient.get(url); }, updateProposalEvent: async ( messageId: string, proposalId: string, event: CreateEventDTO, ): Promise => { return ApiClient.put(`/chat/messages/${messageId}/proposal`, { proposalId, event, }); }, };