import { useForm } from '@inertiajs/react';
import { useState, useEffect } from 'react';
import { Timer, ChevronRight } from 'lucide-react';
import StudentLayout from '@/Layouts/StudentLayout';
import { Head } from '@inertiajs/react';

function OptionButton({ letter, text, selected, onClick }) {
    return (
        <button
            type="button"
            onClick={onClick}
            className={`w-full text-left p-5 rounded-full transition-all border-2 ${
                selected
                    ? 'bg-primary-500 text-white border-primary-500 shadow-lg scale-[0.98]'
                    : 'bg-white shadow-sm hover:shadow-md border-transparent hover:border-primary-100'
            }`}
        >
            <div className="flex items-center gap-4">
                <div
                    className={`w-10 h-10 rounded-full flex items-center justify-center font-bold text-sm transition-colors ${
                        selected
                            ? 'bg-white/20 text-white'
                            : 'bg-surface text-primary'
                    }`}
                >
                    {letter}
                </div>
                <p className="flex-1 font-medium">{text}</p>
            </div>
        </button>
    );
}

export default function QuizSession({ sessionId, question, progress, timer }) {
    const [selectedOption, setSelectedOption] = useState(null);
    const [elapsedSeconds, setElapsedSeconds] = useState(timer.elapsed);
    const { post, processing } = useForm({
        selected_option: '',
        time_spent: 0,
    });

    useEffect(() => {
        const interval = setInterval(() => {
            setElapsedSeconds((prev) => prev + 1);
        }, 1000);
        return () => clearInterval(interval);
    }, []);

    function formatTime(seconds) {
        const m = Math.floor(seconds / 60);
        const s = seconds % 60;
        return `${m}:${String(s).padStart(2, '0')}`;
    }

    function handleSubmit() {
        if (!selectedOption) return;
        post(route('student.quiz.answer', { session: sessionId, n: question.number }), {
            data: {
                selected_option: selectedOption,
                time_spent: elapsedSeconds,
            },
            preserveScroll: true,
        });
    }

    const dots = Array.from({ length: question.total }, (_, i) => {
        if (i + 1 < question.number) return 'answered';
        if (i + 1 === question.number) return 'current';
        return 'pending';
    });

    return (
        <StudentLayout title="Questão" activeSidebarKey="quizzes">
            <Head title={`Questão ${question.number}`} />

            <div className="min-h-screen bg-surface">
                <header className="fixed top-0 w-full z-50 bg-white/80 backdrop-blur-md shadow-sm border-b border-outline-variant/30">
                    <div className="flex justify-between items-center px-6 py-4 max-w-2xl mx-auto">
                        <span className="text-primary font-extrabold tracking-tight text-lg">Simulado Detran</span>
                        <div className="flex items-center gap-3">
                            <div className="flex items-center gap-2 bg-surface-low px-3 py-1.5 rounded-full">
                                <Timer className="w-4 h-4 text-primary" />
                                <span className="font-headline font-bold text-primary tracking-tighter">{formatTime(elapsedSeconds)}</span>
                            </div>
                        </div>
                    </div>
                </header>

                <main className="pt-24 px-6 max-w-2xl mx-auto pb-32">
                    <div className="grid grid-cols-12 gap-4 mb-10">
                        <div className="col-span-8 bg-primary-500 text-white p-6 rounded-2xl flex flex-col justify-center shadow-lg">
                            <span className="text-primary-100 text-xs font-bold uppercase tracking-widest mb-1">Taxa de Acerto</span>
                            <div className="flex items-baseline gap-2">
                                <span className="text-4xl font-extrabold font-headline">{progress.currentScore}%</span>
                                <span className="text-primary-100 text-sm font-medium">Progressão Ideal</span>
                            </div>
                        </div>
                        <div className="col-span-4 bg-white p-6 rounded-2xl flex flex-col items-center justify-center border border-outline-variant/20 shadow-sm">
                            <span className="text-primary font-bold text-2xl font-headline">
                                {progress.correctCount}/{question.total}
                            </span>
                            <span className="text-slate-500 text-[10px] font-bold uppercase">Questões</span>
                        </div>
                    </div>

                    <section className="mb-12">
                        <div className="mb-8">
                            <span className="inline-block bg-tertiary-50 text-tertiary-600 text-[10px] font-bold px-3 py-1 rounded-full uppercase tracking-wider mb-4">
                                {question.theme}
                            </span>
                            <h1 className="text-2xl md:text-3xl font-extrabold font-headline text-primary leading-tight">
                                {question.statement}
                            </h1>
                        </div>

                        {question.imageUrl && (
                            <div className="mb-10 overflow-hidden rounded-2xl aspect-[16/7] bg-surface-low">
                                <img
                                    src={question.imageUrl}
                                    alt="Ilustração da questão"
                                    className="w-full h-full object-cover"
                                />
                            </div>
                        )}

                        <div className="space-y-4">
                            {['A', 'B', 'C', 'D'].map((letter) => (
                                <OptionButton
                                    key={letter}
                                    letter={letter}
                                    text={question.options[letter]}
                                    selected={selectedOption === letter}
                                    onClick={() => setSelectedOption(letter)}
                                />
                            ))}
                        </div>
                    </section>

                    <div className="flex items-center justify-between mt-8 mb-6">
                        <div className="flex gap-1.5">
                            {dots.map((status, i) => (
                                <div
                                    key={i}
                                    className={`w-8 h-1.5 rounded-full transition-colors ${
                                        status === 'answered'
                                            ? 'bg-tertiary-600'
                                            : status === 'current'
                                            ? 'bg-primary-500'
                                            : 'bg-surface-high'
                                    }`}
                                />
                            ))}
                        </div>
                        <button
                            onClick={handleSubmit}
                            disabled={!selectedOption || processing}
                            className="bg-primary-500 text-white px-8 py-3.5 rounded-full font-bold text-sm flex items-center gap-2 shadow-xl disabled:opacity-50 disabled:cursor-not-allowed active:scale-95 transition-all"
                        >
                            {question.number >= question.total ? 'FINALIZAR' : 'PRÓXIMA QUESTÃO'}
                            <ChevronRight className="w-4 h-4" />
                        </button>
                    </div>
                </main>
            </div>
        </StudentLayout>
    );
}
