import React, { useState } from 'react';
import { CheckCircle2, XCircle, RotateCcw, Award } from 'lucide-react';

// Data soal kuis
const quizQuestions = [
  {
    question: "Siapakah khalifah pertama setelah wafatnya Nabi Muhammad SAW?",
    options: ["Umar bin Khattab", "Abu Bakar As-Siddiq", "Utsman bin Affan", "Ali bin Abi Thalib"],
    answer: "Abu Bakar As-Siddiq"
  },
  {
    question: "Rukun Islam yang ketiga adalah...",
    options: ["Membaca Syahadat", "Mendirikan Shalat", "Menunaikan Zakat", "Puasa di bulan Ramadhan"],
    answer: "Menunaikan Zakat"
  },
  {
    question: "Majas yang membandingkan benda mati seolah-olah memiliki sifat seperti manusia disebut majas...",
    options: ["Hiperbola", "Personifikasi", "Metafora", "Simile"],
    answer: "Personifikasi"
  },
  {
    question: "Rumus kimia dari senyawa air murni adalah...",
    options: ["CO2", "NaCl", "H2O", "O2"],
    answer: "H2O"
  },
  {
    question: "Proklamasi kemerdekaan Republik Indonesia dibacakan pada tanggal...",
    options: ["1 Juni 1945", "17 Agustus 1945", "10 November 1945", "20 Mei 1908"],
    answer: "17 Agustus 1945"
  },
  {
    question: "Sifat wajib bagi Allah yang memiliki arti 'Terdahulu' (tidak ada permulaan) adalah...",
    options: ["Wujud", "Qidam", "Baqa", "Mukhalafatu lil hawaditsi"],
    answer: "Qidam"
  },
  {
    question: "Organ dalam tubuh manusia yang berfungsi memompa darah ke seluruh tubuh adalah...",
    options: ["Paru-paru", "Hati", "Ginjal", "Jantung"],
    answer: "Jantung"
  },
  {
    question: "Hasil perhitungan dari 15 x 3 - 10 adalah...",
    options: ["25", "30", "35", "45"],
    answer: "35"
  },
  {
    question: "Ibukota dari provinsi Sulawesi Selatan adalah...",
    options: ["Palu", "Kendari", "Manado", "Makassar"],
    answer: "Makassar"
  },
  {
    question: "Perang Badar, yang merupakan salah satu perang besar dalam sejarah Islam, terjadi pada tahun keberapa Hijriah?",
    options: ["1 Hijriah", "2 Hijriah", "3 Hijriah", "4 Hijriah"],
    answer: "2 Hijriah"
  }
];

export default function App() {
  const [currentQuestion, setCurrentQuestion] = useState(0);
  const [showScore, setShowScore] = useState(false);
  const [score, setScore] = useState(0);
  const [selectedOption, setSelectedOption] = useState('');
  const [isAnswered, setIsAnswered] = useState(false);
  const [userAnswers, setUserAnswers] = useState([]);

  // Fungsi untuk menangani saat pengguna memilih jawaban
  const handleOptionClick = (option) => {
    if (isAnswered) return; // Mencegah klik ganda

    setSelectedOption(option);
    setIsAnswered(true);

    const isCorrect = option === quizQuestions[currentQuestion].answer;
    if (isCorrect) {
      setScore(score + 10); // Setiap soal bernilai 10 poin
    }

    // Menyimpan rekam jejak jawaban
    setUserAnswers([
      ...userAnswers,
      {
        question: quizQuestions[currentQuestion].question,
        selected: option,
        correct: quizQuestions[currentQuestion].answer,
        isCorrect: isCorrect
      }
    ]);
  };

  // Fungsi untuk lanjut ke soal berikutnya
  const handleNextQuestion = () => {
    const nextQuestion = currentQuestion + 1;
    if (nextQuestion < quizQuestions.length) {
      setCurrentQuestion(nextQuestion);
      setSelectedOption('');
      setIsAnswered(false);
    } else {
      setShowScore(true);
    }
  };

  // Fungsi untuk mengulang kuis dari awal
  const handleRestartQuiz = () => {
    setCurrentQuestion(0);
    setShowScore(false);
    setScore(0);
    setSelectedOption('');
    setIsAnswered(false);
    setUserAnswers([]);
  };

  // Kalkulasi persentase progres
  const progressPercentage = ((currentQuestion + 1) / quizQuestions.length) * 100;

  return (
    <div className="min-h-screen bg-emerald-50 flex items-center justify-center p-4 font-sans text-slate-800">
      <div className="bg-white rounded-2xl shadow-xl w-full max-w-lg overflow-hidden border border-emerald-100 relative">

        {/* Header Section */}
        <div className="bg-emerald-600 p-6 text-white text-center">
          <h1 className="text-2xl font-bold">Kuis Pintar Siswa MA</h1>
          {!showScore && (
            <p className="text-emerald-100 mt-1 text-sm">
              Soal {currentQuestion + 1} dari {quizQuestions.length}
            </p>
          )}
        </div>

        {showScore ? (
          /* Tampilan Skor Akhir */
          <div className="p-6 md:p-8 flex flex-col items-center animate-in fade-in zoom-in duration-500">
            <Award className="w-20 h-20 text-yellow-400 mb-4 drop-shadow-md" />
            <h2 className="text-3xl font-extrabold text-slate-800 mb-2">Skor Kamu: {score}</h2>

            <p className="text-lg text-slate-600 text-center mb-8">
              {score >= 80 ? 'Luar biasa! Pertahankan prestasimu.' : 
               score >= 60 ? 'Bagus! Tingkatkan lagi belajarnya.' : 
               'Jangan menyerah, ayo belajar lebih giat lagi!'}
            </p>

            <div className="w-full mb-6">
              <h3 className="font-semibold text-lg border-b pb-2 mb-3">Ringkasan Jawaban:</h3>
              <div className="max-h-60 overflow-y-auto space-y-3 pr-2">
                {userAnswers.map((ans, index) => (
                  <div key={index} className="p-3 bg-slate-50 rounded-lg text-sm border border-slate-100">
                    <p className="font-medium text-slate-700 mb-1">{index + 1}. {ans.question}</p>
                    <div className="flex items-center gap-2">
                      {ans.isCorrect ? (
                        <CheckCircle2 className="w-4 h-4 text-emerald-500" />
                      ) : (
                        <XCircle className="w-4 h-4 text-rose-500" />
                      )}
                      <span className={ans.isCorrect ? "text-emerald-600" : "text-rose-600 line-through"}>
                        {ans.selected}
                      </span>
                    </div>
                    {!ans.isCorrect && (
                      <p className="text-emerald-600 mt-1 text-xs font-semibold">
                        Jawaban benar: {ans.correct}
                      </p>
                    )}
                  </div>
                ))}
              </div>
            </div>

            <button
              onClick={handleRestartQuiz}
              className="flex items-center justify-center w-full gap-2 bg-emerald-600 hover:bg-emerald-700 text-white font-bold py-3 px-6 rounded-xl transition-all active:scale-95"
            >
              <RotateCcw className="w-5 h-5" />
              Coba Lagi
            </button>
          </div>
        ) : (
          /* Tampilan Soal Kuis */
          <div className="p-6 md:p-8">
            {/* Progress Bar */}
            <div className="w-full bg-slate-100 rounded-full h-2 mb-6">
              <div 
                className="bg-emerald-500 h-2 rounded-full transition-all duration-500 ease-out" 
                style={{ width: `${progressPercentage}%` }}
              ></div>
            </div>

            {/* Pertanyaan */}
            <h2 className="text-xl md:text-2xl font-bold mb-6 text-slate-800 leading-snug">
              {quizQuestions[currentQuestion].question}
            </h2>

            {/* Pilihan Jawaban */}
            <div className="flex flex-col space-y-3">
              {quizQuestions[currentQuestion].options.map((option, index) => {

                // Logika gaya tombol berdasarkan status jawaban (benar/salah)
                let buttonStyle = "bg-white border-2 border-slate-200 text-slate-700 hover:border-emerald-500 hover:bg-emerald-50";

                if (isAnswered) {
                  if (option === quizQuestions[currentQuestion].answer) {
                    buttonStyle = "bg-emerald-100 border-2 border-emerald-500 text-emerald-800"; // Jawaban Benar disorot
                  } else if (option === selectedOption) {
                    buttonStyle = "bg-rose-100 border-2 border-rose-500 text-rose-800"; // Jawaban Salah yang dipilih
                  } else {
                    buttonStyle = "bg-slate-50 border-2 border-slate-100 text-slate-400 opacity-50"; // Sisa jawaban di-disable
                  }
                }

                return (
                  <button
                    key={index}
                    onClick={() => handleOptionClick(option)}
                    disabled={isAnswered}
                    className={`flex items-center justify-between w-full text-left font-medium py-4 px-5 rounded-xl transition-all duration-200 ${buttonStyle}`}
                  >
                    <span>{option}</span>
                    {isAnswered && option === quizQuestions[currentQuestion].answer && (
                      <CheckCircle2 className="w-5 h-5 text-emerald-600 animate-in zoom-in" />
                    )}
                    {isAnswered && option === selectedOption && option !== quizQuestions[currentQuestion].answer && (
                      <XCircle className="w-5 h-5 text-rose-600 animate-in zoom-in" />
                    )}
                  </button>
                );
              })}
            </div>

            {/* Tombol Lanjut */}
            {isAnswered && (
              <div className="mt-8 animate-in slide-in-from-bottom-2 fade-in duration-300">
                <button
                  onClick={handleNextQuestion}
                  className="w-full bg-slate-800 hover:bg-slate-900 text-white font-bold py-4 px-6 rounded-xl transition-all active:scale-95 shadow-lg"
                >
                  {currentQuestion === quizQuestions.length - 1 ? 'Lihat Nilai Akhir' : 'Lanjut ke Soal Berikutnya'}
                </button>
              </div>
            )}
          </div>
        )}
      </div>
    </div>
  );
}

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *