import { apiClient } from './client' import type { ApiResponse, PaginatedResult } from './types' export interface ChatParticipant { id: number conversation_id: number participant_type: 'user' | 'admin' participant_id: number role: 'renter' | 'owner' | 'support' | 'customer' remark: string display_name: string avatar_url: string last_read_at?: string joined_at: string } export interface ChatConversation { id: number order_id: number | null type: string title: string status: string role: 'renter' | 'owner' | 'support' | 'customer' participants?: ChatParticipant[] last_message_id?: number last_message_preview: string last_message_at?: string unread_count: number created_at: string updated_at: string } export interface ChatMessage { id: number conversation_id: number sender_type: 'user' | 'admin' | 'system' sender_id: number sender_role: 'renter' | 'owner' | 'support' | 'customer' | 'system' sender_name: string sender_avatar: string is_self: boolean content_type: 'text' | 'system' content: string attachment_urls: string[] created_at: string } export async function fetchChats(page = 1, pageSize = 20) { const { data } = await apiClient.get>>('/chats', { params: { page, page_size: pageSize }, }) return data.data } export async function fetchChat(id: number) { const { data } = await apiClient.get>(`/chats/${id}`) return data.data } export async function fetchOrderChat(orderId: number) { const { data } = await apiClient.get>(`/orders/${orderId}/chat`) return data.data } export async function ensureSupportChat() { const { data } = await apiClient.post>('/chats/support') return data.data } export async function fetchChatMessages(id: number, page = 1, pageSize = 100) { const { data } = await apiClient.get>>(`/chats/${id}/messages`, { params: { page, page_size: pageSize }, }) return data.data } export async function sendChatMessage(id: number, content: string, attachmentUrls: string[] = []) { const { data } = await apiClient.post>(`/chats/${id}/messages`, { content, attachment_urls: attachmentUrls, }) return data.data } export async function markChatRead(id: number) { const { data } = await apiClient.post>(`/chats/${id}/read`) return data.data } export async function fetchAdminChats(page = 1, pageSize = 50, filter = 'all') { const { data } = await apiClient.get>>('/admin/chats', { params: { page, page_size: pageSize, filter }, }) return data.data } export async function fetchAdminChat(id: number) { const { data } = await apiClient.get>(`/admin/chats/${id}`) return data.data } export async function fetchAdminChatMessages(id: number, page = 1, pageSize = 100) { const { data } = await apiClient.get>>(`/admin/chats/${id}/messages`, { params: { page, page_size: pageSize }, }) return data.data } export async function sendAdminChatMessage(id: number, content: string, attachmentUrls: string[] = []) { const { data } = await apiClient.post>(`/admin/chats/${id}/messages`, { content, attachment_urls: attachmentUrls, }) return data.data } export async function markAdminChatRead(id: number) { const { data } = await apiClient.post>(`/admin/chats/${id}/read`) return data.data } export interface SupportAdmin { id: number nickname: string chat_count: number } export async function fetchSupportAdmins() { const { data } = await apiClient.get>('/admin/chats/support-admins') return data.data } export async function transferChat(id: number, toAdminId: number) { const { data } = await apiClient.post>(`/admin/chats/${id}/transfer`, { to_admin_id: toAdminId, }) return data.data } export async function updateChatRemark(id: number, remark: string) { const { data } = await apiClient.put>(`/admin/chats/${id}/remark`, { remark }) return data.data } export interface QuickReply { id: number admin_user_id: number title: string content: string sort_order: number is_global: boolean } export async function fetchQuickReplies() { const { data } = await apiClient.get>('/admin/chats/quick-replies') return data.data } export async function createQuickReply(title: string, content: string, sortOrder = 0, isGlobal = false) { const { data } = await apiClient.post>('/admin/chats/quick-replies', { title, content, sort_order: sortOrder, is_global: isGlobal, }) return data.data } export async function updateQuickReply(id: number, updates: { title?: string; content?: string; sort_order?: number }) { const { data } = await apiClient.put>(`/admin/chats/quick-replies/${id}`, updates) return data.data } export async function deleteQuickReply(id: number) { const { data } = await apiClient.delete>(`/admin/chats/quick-replies/${id}`) return data.data } export async function fetchAutoWelcomeMessage() { const { data } = await apiClient.get>('/admin/chats/auto-welcome') return data.data.message } export async function updateAutoWelcomeMessage(message: string) { const { data } = await apiClient.put>('/admin/chats/auto-welcome', { message }) return data.data }