import { useState } from 'react' import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query' import { useTranslation } from 'react-i18next' import { pollsApi, PollInfo, PollQuestion } from '../api/polls' const ClipboardIcon = () => ( ) const GiftIcon = () => ( ) const CheckIcon = () => ( ) export default function Polls() { const { t } = useTranslation() const queryClient = useQueryClient() const [selectedPoll, setSelectedPoll] = useState(null) const [currentQuestion, setCurrentQuestion] = useState(null) const [questionIndex, setQuestionIndex] = useState(0) const [totalQuestions, setTotalQuestions] = useState(0) const [completionMessage, setCompletionMessage] = useState<{ reward: number | null; message: string } | null>(null) const { data: polls, isLoading, error } = useQuery({ queryKey: ['polls'], queryFn: pollsApi.getPolls, }) const startPollMutation = useMutation({ mutationFn: pollsApi.startPoll, onSuccess: (data) => { setCurrentQuestion(data.question) setQuestionIndex(data.current_question_index) setTotalQuestions(data.total_questions) setCompletionMessage(null) }, }) const answerMutation = useMutation({ mutationFn: ({ responseId, questionId, optionId, }: { responseId: number questionId: number optionId: number }) => pollsApi.answerQuestion(responseId, questionId, optionId), onSuccess: (data) => { if (data.is_completed) { setCurrentQuestion(null) setCompletionMessage({ reward: data.reward_granted, message: data.message || t('polls.completed'), }) queryClient.invalidateQueries({ queryKey: ['polls'] }) } else if (data.next_question) { setCurrentQuestion(data.next_question) setQuestionIndex(data.current_question_index || 0) setTotalQuestions(data.total_questions) } }, }) const handleStartPoll = (poll: PollInfo) => { setSelectedPoll(poll) startPollMutation.mutate(poll.response_id) } const handleAnswer = (optionId: number) => { if (selectedPoll && currentQuestion) { answerMutation.mutate({ responseId: selectedPoll.response_id, questionId: currentQuestion.id, optionId, }) } } const handleClosePoll = () => { setSelectedPoll(null) setCurrentQuestion(null) setCompletionMessage(null) } if (isLoading) { return (
) } if (error) { return (

{t('polls.error')}

) } return (

{t('polls.title')}

{/* Poll Modal */} {selectedPoll && (

{selectedPoll.title}

{startPollMutation.isPending && (
)} {completionMessage && (

{completionMessage.message}

{completionMessage.reward && (

+{completionMessage.reward} {t('polls.reward')}

)}
)} {currentQuestion && !completionMessage && (
{t('polls.question')} {questionIndex + 1} {t('polls.of')} {totalQuestions}

{currentQuestion.text}

{currentQuestion.options.map((option) => ( ))}
{answerMutation.isPending && (
)}
)}
)} {/* Polls List */} {polls && polls.length > 0 ? (
{polls.map((poll) => (

{poll.title}

{poll.description && (

{poll.description}

)}
{poll.answered_questions}/{poll.total_questions} {t('polls.questions')}
{poll.reward_amount && (
+{poll.reward_amount}
)}
{poll.is_completed ? ( ) : ( )}
))}
) : (

{t('polls.noPolls')}

)}
) }