<?php
header('Content-Type: application/json; charset=utf-8');
require_once 'auth_helper.php';

// إخفاء أخطاء PHP عن المستخدم + استثناءات mysqli (التفاصيل تذهب إلى error_log فقط)
ini_set('display_errors', '0');
mysqli_report(MYSQLI_REPORT_STRICT);

try {
 $db = mysqli_connect('localhost', 'sooraapps_warqauser', 'YTR#,;_h4WU!Ey~R', 'sooraapps_warqa');
    mysqli_set_charset($db, 'utf8mb4');
} catch (Throwable $e) {
    error_log(basename(__FILE__) . ' connect: ' . $e->getMessage());
    echo json_encode(["status" => "error", "message" => "dbConnectionFailed"]);
    exit;
}

// ── التحقق: الطالب نفسه داخل الصف، أو معلم يملك الصف والطالب داخله ─────────────
function canAccessStudentNotes($db, $classid, $studentid, $token) {
    $cid = (int)$classid;
    $sid = (int)$studentid;
    if ($cid <= 0 || $sid <= 0 || $token === '') return false;

    if (verifyStudentToken($db, $sid, $token) && verifyStudentInClass($db, $sid, $cid)) {
        return true;
    }

    $st = $db->prepare(
        "SELECT u.id FROM users u
         INNER JOIN classes  c ON c.teacherid = u.id
         INNER JOIN students s ON s.class_id  = c.id
         WHERE c.id = ? AND s.id = ? AND u.token = ? AND u.role = 'teacher' LIMIT 1"
    );
    $st->bind_param("iis", $cid, $sid, $token);
    $st->execute();
    $ok = $st->get_result()->num_rows > 0;
    $st->close();
    return $ok;
}

$classid   = trim($_POST['classid']   ?? '');
$studentid = trim($_POST['studentid'] ?? '');
$token     = getRequestToken();

if ($classid === '' || $studentid === '') {
    echo json_encode(["status" => "error", "message" => "missing parameters"]);
    exit;
}

// [إصلاح 1] لا تحقق سابقاً + حقن SQL مباشر (classid / studentid داخل النص)
if (!canAccessStudentNotes($db, $classid, $studentid, $token)) {
    denyAccess();
}

// دالة للحصول على صفحات كل جزء
function getPagesForJuz($juzNumber) {
    switch ((int)$juzNumber) {
        case 1: return range(1, 21);
        case 2: return range(22, 41);
        case 3: return range(42, 61);
        case 4: return range(62, 81);
        case 5: return range(82, 101);
        case 6: return range(102, 121);
        case 7: return range(122, 141);
        case 8: return range(142, 161);
        case 9: return range(162, 181);
        case 10: return range(182, 201);
        case 11: return range(202, 221);
        case 12: return range(222, 241);
        case 13: return range(242, 261);
        case 14: return range(262, 281);
        case 15: return range(282, 301);
        case 16: return range(302, 321);
        case 17: return range(322, 341);
        case 18: return range(342, 361);
        case 19: return range(362, 381);
        case 20: return range(382, 401);
        case 21: return range(402, 421);
        case 22: return range(422, 441);
        case 23: return range(442, 461);
        case 24: return range(462, 481);
        case 25: return range(482, 501);
        case 26: return range(502, 521);
        case 27: return range(522, 541);
        case 28: return range(542, 561);
        case 29: return range(562, 581);
        case 30: return range(582, 604);
        default: return [];
    }
}

try {
    $c = (string)(int)$classid;
    $s = (string)(int)$studentid;

    // الحصول على جميع الصفحات الخضراء لهذا الطالب
    $stmt = $db->prepare("SELECT DISTINCT page FROM notes WHERE classid = ? AND studentid = ? AND color = '4'");
    $stmt->bind_param("ss", $c, $s);
    $stmt->execute();
    $result = $stmt->get_result();
    $greenPages = [];
    while ($row = $result->fetch_assoc()) {
        $greenPages[(int)$row['page']] = true;
    }
    $stmt->close();

    // حساب حالة كل جزء
    $juzStatus = [];
    for ($juz = 1; $juz <= 30; $juz++) {
        $pagesInJuz = getPagesForJuz($juz);
        $totalPages = count($pagesInJuz);
        $greenCount = 0;
        foreach ($pagesInJuz as $page) {
            if (isset($greenPages[$page])) $greenCount++;
        }
        // الجزء مكتمل إذا كانت جميع صفحاته خضراء
        $juzStatus[$juz] = ($greenCount >= $totalPages);
    }

    echo json_encode([
        "status" => "success",
        "juz_status" => $juzStatus,
        "green_pages_count" => count($greenPages)
    ]);
} catch (Throwable $e) {
    error_log('get_juz_completion_status: ' . $e->getMessage());
    echo json_encode(["status" => "error", "message" => "serverError"]);
}
$db->close();
?>