import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import axios from "axios"

export const useConversationQuery = (accountId, conversationId) => {
    return useQuery(
        ["conversation", accountId, conversationId],
        () => fetchConversation(accountId, conversationId),
        {
            "enabled": !!(accountId && conversationId),
        }
    )
}

export const useMessagesQuery = (accountId, conversationId) => {
    return useQuery(
        ["messages", accountId, conversationId],
        () => fetchMessages(accountId, conversationId),
        {
            "enabled": !!(accountId && conversationId),
        }
    )
}

export const useSendMessageMutation = (accountId, conversationId) => {
    const queryClient = useQueryClient();
    return useMutation(
        (message) => (
            axios.post(`/api/accounts/${accountId}/conversations/${conversationId}`, {message})
        ),
        {
            "onSuccess": () => queryClient.invalidateQueries(["messages", accountId, conversationId]),
        }
    )
}

const fetchConversation = (accountId, conversationId) => (
    axios
    .get(`/api/accounts/${accountId}/conversations/${conversationId}`)
    .then((result) => result.data)
)

const fetchMessages = (accountId, conversationId) => (
    axios
    .get(`/api/accounts/${accountId}/conversations/${conversationId}/messages`)
    .then((result) => result.data)
)