export default function useGetAiReviewResult({ cardInfo, updateAiReview, startAiReviewFn, getAiReviewResultFn, }: { cardInfo: any; updateAiReview: (ai_review: any) => void; startAiReviewFn: (params: { id: string; platform: string; content: string }) => Promise; getAiReviewResultFn: (id: string, ticket: string) => Promise; }) { const statusPollingTimer = ref(null); const ticket = ref(''); const checkLoading = ref(false); const checkResult = ref({}); const handleStartCheck = async () => { checkLoading.value = true; const { id, platform, content } = cardInfo.value; const { code, data } = await startAiReviewFn({ id, platform, content }); if (code === 200) { ticket.value = data.ticket; startStatusPolling(); } }; const handleAgainCheck = async () => { checkResult.value = {}; ticket.value = ''; clearStatusPollingTimer(); handleStartCheck(); }; const startStatusPolling = () => { clearStatusPollingTimer(); statusPollingTimer.value = setInterval(async () => { const { code, data } = await getAiReviewResultFn(cardInfo.value.id, ticket.value); if (code === 200 && data.status === 1) { checkResult.value = data.ai_review; updateAiReview?.(data.ai_review); checkLoading.value = false; clearStatusPollingTimer(); } }, 3000); }; const clearStatusPollingTimer = () => { if (statusPollingTimer.value) { clearInterval(statusPollingTimer.value); statusPollingTimer.value = null; } }; onUnmounted(() => { clearStatusPollingTimer(); }); return { handleStartCheck, handleAgainCheck, checkResult, checkLoading, ticket, }; }