// app/dashboard/users/[userId]/hooks/useMessageSending.ts

import { useState } from "react";
import { toast } from "sonner";

export function useMessageSending(
    userId: string,
    conversations: Conversation[],
    user: TelegramUser | null,
    updateConversations: (newConversation: Conversation) => void
) {
    const [newMessage, setNewMessage] = useState("");
    const [isSending, setIsSending] = useState(false);

    const fetchConversationDetails = async (conversationId: string) => {
        try {
            const res = await fetch(`/api/users/${userId}/conversations/${conversationId}`);

            if (!res.ok) {
                throw new Error("Failed to fetch conversation details");
            }

            const data = await res.json();
            return data;
        } catch (error) {
            console.error(`Error loading conversation ${conversationId}:`, error);
            return null;
        }
    };

    const handleSendMessage = async () => {
        if (!newMessage.trim() || user?.respondent !== "admin") return;
        setIsSending(true);
        try {
            let conversationId;
            if (conversations.length > 0) {
                conversationId = conversations[conversations.length - 1].id;
            } else {
                const createConvRes = await fetch(`/api/users/${userId}/conversations`, {
                    method: "POST",
                    headers: {
                        "Content-Type": "application/json",
                    },
                    body: JSON.stringify({
                        title: "مکالمه پشتیبانی",
                        telegramChatId: user.telegramId,
                    }),
                });
                if (!createConvRes.ok) {
                    throw new Error("Failed to create new conversation");
                }
                const newConversation = await createConvRes.json();
                conversationId = newConversation.id;

                // اضافه کردن مکالمه جدید به لیست مکالمات
                updateConversations(newConversation);
            }

            // ارسال پیام به مکالمه
            const sendMessageRes = await fetch(`/api/users/${userId}/conversations/${conversationId}/messages`, {
                method: "POST",
                headers: {
                    "Content-Type": "application/json",
                },
                body: JSON.stringify({
                    content: newMessage,
                    role: "assistant",
                }),
            });

            if (!sendMessageRes.ok) {
                throw new Error("Failed to send message");
            }

            const updatedConversation = await fetchConversationDetails(conversationId);
            updateConversations(updatedConversation);

            setNewMessage("");

        } catch (error) {
            console.error("Error sending message:", error);
            toast.error("ارسال پیام با مشکل مواجه شد");
        } finally {
            setIsSending(false);
        }
    };

    return {
        newMessage,
        setNewMessage,
        isSending,
        handleSendMessage
    };
}