<?php
require_once '../../config/config.php';
header('Content-Type: application/json');

function done($data){ echo json_encode(['status'=>'success'] + $data); exit; }
function fail($m){ http_response_code(500); echo json_encode(['status'=>'error','message'=>$m]); exit; }

try {
    // Pick latest exam_subjects (default 10, override with ?count=)
    $limit = isset($_GET['count']) ? max(1, (int)$_GET['count']) : 10;
    $force = isset($_GET['force']) && in_array(strtolower((string)$_GET['force']), ['1','true','yes'], true);
    $stmtEs = $pdo->prepare("SELECT es.exam_subject_id, e.exam_name, s.subject_id, s.subject_name
                              FROM exam_subjects es
                              JOIN exams e ON es.exam_id = e.exam_id
                              JOIN subjects s ON es.subject_id = s.subject_id
                              ORDER BY es.exam_subject_id DESC LIMIT :limit");
    $stmtEs->bindValue(':limit', $limit, PDO::PARAM_INT);
    $stmtEs->execute();
    $es = $stmtEs->fetchAll(PDO::FETCH_ASSOC);
    if (!$es) done(['created'=>0]);

    $created=0; $sections=0; $questions=0;
    foreach ($es as $row){
        // Create question_pattern if not exists (unique per exam_subject)
        $check = $pdo->prepare('SELECT pattern_id FROM question_patterns WHERE exam_subject_id = ?');
        $check->execute([$row['exam_subject_id']]);
        $pid = $check->fetchColumn();
        if (!$pid) {
            $pdo->prepare('INSERT INTO question_patterns(pattern_name,total_marks,exam_subject_id) VALUES (?,?,?)')
                ->execute(['Default Pattern 70', 70, $row['exam_subject_id']]);
            $pid = (int)$pdo->lastInsertId();
            $created++;
        } else {
            $pid = (int)$pid;
            if ($force) {
                // Reset existing sections and questions for this pattern
                $sidStmt = $pdo->prepare('SELECT section_id FROM pattern_sections WHERE pattern_id = ?');
                $sidStmt->execute([$pid]);
                $sids = $sidStmt->fetchAll(PDO::FETCH_COLUMN, 0);
                if ($sids) {
                    $in = implode(',', array_fill(0, count($sids), '?'));
                    $delQ = $pdo->prepare("DELETE FROM pattern_questions WHERE section_id IN ($in)");
                    $delQ->execute($sids);
                }
                $pdo->prepare('DELETE FROM pattern_sections WHERE pattern_id = ?')->execute([$pid]);
                // Ensure pattern meta is up to date
                $pdo->prepare('UPDATE question_patterns SET pattern_name = ?, total_marks = ? WHERE pattern_id = ?')
                    ->execute(['Default Pattern 70', 70, $pid]);
            }
        }

        // Ensure two sections: Part A (10x2=20) and Part B (10x5=50)
        $secStmt = $pdo->prepare('INSERT INTO pattern_sections (pattern_id, section_name, num_questions, marks_per_question, section_total, question_start_num, question_end_num) VALUES (?,?,?,?,?,?,?)');
        $existing = $pdo->prepare('SELECT section_id FROM pattern_sections WHERE pattern_id = ?');
        $existing->execute([$pid]);
        if ($force || !$existing->fetch()) {
            $secStmt->execute([$pid,'Part A',10,2,20,1,10]); $sidA = (int)$pdo->lastInsertId(); $sections++;
            $secStmt->execute([$pid,'Part B',10,5,50,11,20]); $sidB = (int)$pdo->lastInsertId(); $sections++;
            // Seed default questions with CO/PO
            $qIns = $pdo->prepare('INSERT INTO pattern_questions(section_id, question_no, question_text, co_codes, po_codes) VALUES (?,?,?,?,?)');
            for($i=1;$i<=10;$i++){ $qIns->execute([$sidA, $i, 'Short answer Q'.$i, '["CO1"]', '["PO1"]']); $questions++; }
            for($i=11;$i<=20;$i++){ $qIns->execute([$sidB, $i, 'Descriptive question Q'.$i, '["CO1"]', '["PO2","PO3"]']); $questions++; }
        }
    }

    done(['processed_exam_subjects'=>count($es),'created_patterns'=>$created,'created_sections'=>$sections,'created_questions'=>$questions,'force'=>$force]);
} catch (Throwable $e) { fail($e->getMessage()); }
?>


