<?php
require_once __DIR__ . '/../includes/bootstrap.php';
require_admin();

$quizId = filter_input(INPUT_GET, 'quiz_id', FILTER_VALIDATE_INT)
    ?: filter_input(INPUT_POST, 'quiz_id', FILTER_VALIDATE_INT);
$questionId = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT)
    ?: filter_input(INPUT_POST, 'question_id', FILTER_VALIDATE_INT)
    ?: 0;
if (!$quizId) {
    flash('danger', 'رقم الاختبار غير صحيح.');
    redirect('admin/quizzes.php');
}

$stmt = db()->prepare('SELECT * FROM quizzes WHERE id = ? LIMIT 1');
$stmt->execute([$quizId]);
$quiz = $stmt->fetch();
if (!$quiz) {
    flash('danger', 'الاختبار غير موجود.');
    redirect('admin/quizzes.php');
}

$editing = $questionId > 0;
$errors = [];
$data = [
    'question_text' => '',
    'hint_text' => '',
    'explanation' => '',
    'sort_order' => 1,
    'options' => ['', '', '', ''],
    'correct_option' => 1,
];

if ($editing) {
    $stmt = db()->prepare('SELECT * FROM quiz_questions WHERE id = ? AND quiz_id = ? LIMIT 1');
    $stmt->execute([$questionId, $quizId]);
    $question = $stmt->fetch();
    if (!$question) {
        flash('danger', 'السؤال غير موجود.');
        redirect('admin/quiz_questions.php?quiz_id=' . $quizId);
    }
    $data['question_text'] = $question['question_text'];
    $data['hint_text'] = $question['hint_text'] ?? '';
    $data['explanation'] = $question['explanation'] ?? '';
    $data['sort_order'] = (int) $question['sort_order'];
    $stmt = db()->prepare('SELECT * FROM quiz_options WHERE question_id = ? ORDER BY sort_order');
    $stmt->execute([$questionId]);
    $options = $stmt->fetchAll();
    foreach ($options as $index => $option) {
        if ($index < 4) {
            $data['options'][$index] = $option['option_text'];
            if ((int) $option['is_correct'] === 1) {
                $data['correct_option'] = $index + 1;
            }
        }
    }
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    verify_csrf();
    $data['question_text'] = trim((string) ($_POST['question_text'] ?? ''));
    $data['hint_text'] = trim((string) ($_POST['hint_text'] ?? ''));
    $data['explanation'] = trim((string) ($_POST['explanation'] ?? ''));
    $data['sort_order'] = max(1, (int) ($_POST['sort_order'] ?? 1));
    $postedOptions = (array) ($_POST['options'] ?? []);
    $data['options'] = [];
    for ($i = 0; $i < 4; $i++) {
        $data['options'][$i] = trim((string) ($postedOptions[$i] ?? ''));
    }
    $data['correct_option'] = (int) ($_POST['correct_option'] ?? 0);

    if (mb_strlen($data['question_text']) < 3) {
        $errors[] = 'اكتب نص السؤال.';
    }
    foreach ($data['options'] as $index => $optionText) {
        if ($optionText === '') {
            $errors[] = 'اكتب الاختيار ' . option_letter($index + 1) . '.';
        }
    }
    if (count(array_unique($data['options'])) !== 4) {
        $errors[] = 'يجب أن تكون الاختيارات الأربعة مختلفة.';
    }
    if (!in_array($data['correct_option'], [1, 2, 3, 4], true)) {
        $errors[] = 'حدد الإجابة الصحيحة.';
    }

    if (!$errors) {
        db()->beginTransaction();
        try {
            if ($editing) {
                $stmt = db()->prepare('UPDATE quiz_questions SET question_text = ?, hint_text = ?, explanation = ?, sort_order = ? WHERE id = ? AND quiz_id = ?');
                $stmt->execute([
                    $data['question_text'],
                    $data['hint_text'] !== '' ? $data['hint_text'] : null,
                    $data['explanation'] !== '' ? $data['explanation'] : null,
                    $data['sort_order'],
                    $questionId,
                    $quizId,
                ]);
                $stmt = db()->prepare('DELETE FROM quiz_options WHERE question_id = ?');
                $stmt->execute([$questionId]);
            } else {
                $stmt = db()->prepare('INSERT INTO quiz_questions (quiz_id, question_text, hint_text, explanation, sort_order) VALUES (?, ?, ?, ?, ?)');
                $stmt->execute([
                    $quizId,
                    $data['question_text'],
                    $data['hint_text'] !== '' ? $data['hint_text'] : null,
                    $data['explanation'] !== '' ? $data['explanation'] : null,
                    $data['sort_order'],
                ]);
                $questionId = (int) db()->lastInsertId();
            }

            $insert = db()->prepare('INSERT INTO quiz_options (question_id, option_text, sort_order, is_correct) VALUES (?, ?, ?, ?)');
            foreach ($data['options'] as $index => $optionText) {
                $position = $index + 1;
                $insert->execute([$questionId, $optionText, $position, $position === $data['correct_option'] ? 1 : 0]);
            }
            db()->commit();
            flash('success', $editing ? 'تم تعديل السؤال.' : 'تمت إضافة السؤال.');
            redirect('admin/quiz_questions.php?quiz_id=' . $quizId);
        } catch (Throwable $exception) {
            if (db()->inTransaction()) {
                db()->rollBack();
            }
            throw $exception;
        }
    }
}

$pageTitle = $editing ? 'تعديل سؤال' : 'إضافة سؤال';
require_once __DIR__ . '/../includes/header.php';
?>
<div class="dashboard-head">
    <div>
        <span class="dashboard-kicker"><?= e($quiz['title']) ?></span>
        <h1><?= $editing ? 'تعديل السؤال' : 'إضافة سؤال جديد' ?></h1>
        <p>أدخل أربعة اختيارات وحدد الإجابة الصحيحة التي ستظهر للطالب بعد إنهاء الاختبار.</p>
    </div>
    <a class="btn btn-outline" href="<?= e(url('admin/quiz_questions.php?quiz_id=' . $quizId)) ?>">العودة للأسئلة</a>
</div>

<section class="card admin-form-card question-form-card">
    <?php if ($errors): ?>
        <div class="errors"><?php foreach ($errors as $error): ?><div>• <?= e($error) ?></div><?php endforeach; ?></div>
    <?php endif; ?>

    <form method="post">
        <input type="hidden" name="csrf_token" value="<?= e(csrf_token()) ?>">
        <input type="hidden" name="quiz_id" value="<?= (int) $quizId ?>">
        <input type="hidden" name="question_id" value="<?= (int) $questionId ?>">

        <div class="form-group">
            <label for="question_text">نص السؤال</label>
            <textarea id="question_text" name="question_text" rows="4" required placeholder="اكتب السؤال هنا..."><?= e((string) $data['question_text']) ?></textarea>
        </div>

        <div class="form-group">
            <label for="hint_text">تلميح كودو — اختياري</label>
            <textarea id="hint_text" name="hint_text" rows="3" placeholder="مثال: ركّز على الفرق بين المتغير والثابت، واستبعد الاختيارات التي تغيّر قيمتها أثناء التشغيل."><?= e((string) $data['hint_text']) ?></textarea>
            <small class="field-help">يظهر فقط عندما يضغط الطالب «ساعدني يا كودو». اكتب تلميحًا يقربه من الحل دون ذكر الإجابة مباشرة.</small>
        </div>

        <div class="form-group">
            <label for="sort_order">ترتيب السؤال</label>
            <input id="sort_order" type="number" name="sort_order" min="1" value="<?= (int) $data['sort_order'] ?>" required>
        </div>

        <div class="question-options-editor">
            <h2>الاختيارات</h2>
            <?php for ($i = 0; $i < 4; $i++): $position = $i + 1; ?>
                <div class="option-editor-row">
                    <label class="correct-choice" title="حدد الإجابة الصحيحة">
                        <input type="radio" name="correct_option" value="<?= $position ?>" <?= (int) $data['correct_option'] === $position ? 'checked' : '' ?> required>
                        <span><?= e(option_letter($position)) ?></span>
                    </label>
                    <input name="options[]" value="<?= e((string) $data['options'][$i]) ?>" required placeholder="الاختيار <?= e(option_letter($position)) ?>">
                </div>
            <?php endfor; ?>
            <small class="field-help">الدائرة المحددة تعني الإجابة الصحيحة.</small>
        </div>

        <div class="form-group">
            <label for="explanation">توضيح الإجابة — اختياري</label>
            <textarea id="explanation" name="explanation" rows="4" placeholder="اكتب سبب صحة الإجابة ليظهر للطالب في النتيجة."><?= e((string) $data['explanation']) ?></textarea>
        </div>

        <button class="btn btn-primary" type="submit"><?= $editing ? 'حفظ تعديل السؤال' : 'إضافة السؤال' ?></button>
    </form>
</section>
<?php require_once __DIR__ . '/../includes/footer.php'; ?>
