import { useCallback } from 'react'

import { useSend } from '.'
import useSendButtonCaption from './useSendButtonCaption'

function useSendWithButton<R, T extends NonNullable<unknown>>(
    initial: string,
    result: string,
    singular?: boolean,
    ...useSendArgs: Parameters<typeof useSend<R, T>>
) {
    const { doSend, loading, error } = useSend(...useSendArgs)

    const { update, ...button } = useSendButtonCaption(initial, loading, error, result, singular)

    const doSendWithButton = useCallback(async (...args: Parameters<typeof doSend>) => {
        const data = await doSend(...args)

        update(data)

        return data
    }, [doSend, update])

    return { doSend: doSendWithButton, button }
}

export default useSendWithButton