"use client"; import { useEffect, useRef, useState } from "react"; import { useSearchParams } from "next/navigation"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card"; import { CheckCircle2, AlertTriangle } from "lucide-react"; import { getSupabaseClient } from "@/lib/supabase"; export default function ObrigadoPage() { const searchParams = useSearchParams(); const rm = searchParams.get("rm") || ""; const name = searchParams.get("nome") || ""; const cpf = searchParams.get("cpf") || ""; const option = searchParams.get("option") || ""; const [countdown, setCountdown] = useState(5); const [saveStatus, setSaveStatus] = useState<"loading" | "success" | "error">( "loading" ); const [errorMessage, setErrorMessage] = useState(""); const hasRun = useRef(false); const [audioElement, setAudioElement] = useState() useEffect(() => { if (!rm || !name || !cpf || !option) { window.location.href = "/"; return; } if (!audioElement) { const audio = new Audio('/confirma.mp3') setAudioElement(audio) } const saveVote = async () => { try { const supabase = getSupabaseClient(); const { error } = await supabase.from("votes").insert([ { rm, name, cpf: cpf.replace(/\D/g, ""), option_voted: option, }, ]); if (error) { console.error("Erro ao salvar voto:", error); setSaveStatus("error"); if (error.code === "23505") { setErrorMessage( "Você já votou anteriormente. Cada eleitor pode votar apenas uma vez." ); } else { setErrorMessage( "Ocorreu um erro ao registrar seu voto. Por favor, informe ao responsável." ); } return; } setSaveStatus("success"); if (!audioElement) return; audioElement.play(); } catch (error) { console.error("Erro ao salvar voto:", error); setSaveStatus("error"); setErrorMessage( "Ocorreu um erro ao registrar seu voto. Por favor, informe ao responsável." ); } }; if (!hasRun.current) { hasRun.current = true; saveVote(); } const timer = setInterval(() => { setCountdown((prev) => { if (prev <= 1) { clearInterval(timer); window.location.href = "/"; return 0; } return prev - 1; }); }, 1000); return () => clearInterval(timer); }, [rm, name, cpf, option]); return (
JUSTIÇA ELEITORAL ESTUDANTIL
{saveStatus === "loading" ? (
) : saveStatus === "success" ? ( ) : ( )}
{saveStatus === "loading" ? "PROCESSANDO SEU VOTO..." : saveStatus === "success" ? "VOTO REGISTRADO COM SUCESSO!" : "ERRO AO REGISTRAR VOTO"} {saveStatus === "success" ? "FIM" : ""}
{saveStatus === "loading" ? (

Aguarde enquanto registramos seu voto...

) : saveStatus === "success" ? ( <>

Você votou em:{" "} {option}

Obrigado por participar das eleições.

Retornando à tela inicial em {countdown} segundos...

) : ( <>

{errorMessage}

Retornando à tela inicial em {countdown} segundos...

)}
© {new Date().getFullYear()} Justiça Eleitoral Estudantil
); }