<?php
/**
 * api/routerrpp.php - Smart Router RPP Generator
 * Fitur: Limitasi (Free 1x/12 jam, Pro 3x/12 jam), Auto-Fallback Multi API Groq
 */
session_start();
error_reporting(0);
ini_set('display_errors', 0);
set_time_limit(0);
ignore_user_abort(true);
header('Content-Type: application/json; charset=utf-8');

include '../config/database.php';

if (!isset($_SESSION['user_id'])) {
    echo json_encode(['error' => 'Sesi berakhir, silakan login ulang.']);
    exit;
}

$user_id = $_SESSION['user_id'];
$topik = $_POST['topik'] ?? '';
$template_text = $_POST['template'] ?? '';
$materi_text   = trim($_POST['materi_text'] ?? '');

if (empty($topik) || empty($template_text)) {
    echo json_encode(['error' => 'Topik dan Template DOCX tidak boleh kosong.']);
    exit;
}

// =========================================================================
// 1. CEK LIMITASI PENGGUNAAN DALAM 12 JAM TERAKHIR
// =========================================================================
$stmt_user = $conn->prepare("SELECT status_akun, role FROM users WHERE id = ?");
$stmt_user->bind_param("s", $user_id);
$stmt_user->execute();
$u = $stmt_user->get_result()->fetch_assoc();
$status_akun = $u['status_akun'] ?? 'free';
$role_user   = $u['role'] ?? 'siswa';
$stmt_user->close();

// Set limit berdasarkan status (admin = unlimited)
$limit_max = ($role_user === 'admin' || $status_akun === 'pro') ? 999 : 1;

// Hitung berapa kali user ini generate dalam 12 jam ke belakang
$stmt_usage = $conn->prepare("SELECT COUNT(id) as total_usage FROM rpp_usage_log WHERE user_id = ? AND created_at >= DATE_SUB(NOW(), INTERVAL 12 HOUR)");
$stmt_usage->bind_param("s", $user_id);
$stmt_usage->execute();
$current_usage = $stmt_usage->get_result()->fetch_assoc()['total_usage'] ?? 0;
$stmt_usage->close();

if ($current_usage >= $limit_max) {
    echo json_encode(['error' => "Limit RPP tercapai! Akun " . strtoupper($status_akun) . " maksimal {$limit_max}x generate per 12 jam."]);
    exit;
}

// =========================================================================
// 2. AMBIL SETTINGS DARI DATABASE
// =========================================================================
$query_settings = mysqli_query($conn, "SELECT * FROM settings WHERE id = 1");
$cfg = mysqli_fetch_assoc($query_settings);

// =========================================================================
// 3. BANGUN PROMPT — pakai materi dari file jika ada, jika tidak dari AI
// =========================================================================
$system_instruction = "Anda adalah Guru Profesional dan Pengembang Kurikulum Ahli. 
Tugas Anda adalah memodifikasi TEMPLATE KOSONG menjadi MODUL AJAR (RPP) yang LENGKAP, SPESIFIK, dan SIAP PAKAI berdasarkan TOPIK yang diberikan.

<RULES>
1. ISI SEMUA PLACEHOLDER: Ganti semua panduan dalam kurung siku [...], kurung biasa (...), dan sel tabel kosong dengan materi yang sangat spesifik dan nyata sesuai TOPIK.
2. KONSISTENSI TOPIK: Seluruh dokumen DARI AWAL SAMPAI AKHIR WAJIB membahas TOPIK yang diminta. 
3. HAPUS CONTOH BAWAAN: JANGAN ADA TERSISA materi dari mata pelajaran lain.
4. FORMAT TABEL KETAT: Pertahankan seluruh struktur tabel dalam bentuk HTML/Markdown yang rapi. Jangan hapus kolom atau baris tabel.
5. TANPA BASA-BASI: Output HANYA berisi dokumen RPP. Jangan tambahkan kalimat pengantar atau penutup apapun.
6. BUAT SOAL EVALUASI TINGKAT TINGGI: Jika ada placeholder soal/LKPD/Evaluasi, WAJIB buatkan butir soal nyata (HOTS) lengkap dengan kunci jawaban.
7. JANGAN MEMOTONG/MERANGKUM: Anda WAJIB mengembalikan SELURUH isi dokumen dari kata pertama sampai kata bagian paling akhir (termasuk lampiran/rubrik). JANGAN PERNAH melewati, memotong, atau menggunakan kalimat seperti \"dan seterusnya\". Tulis secara utuh!
8. HASILKAN OUTPUT TUNTAS: Jangan pernah berhenti sebelum seluruh template selesai diisi. Lanjutkan hingga akhir.
</RULES>";

// Bagian sumber materi — kondisional
if (!empty($materi_text)) {
    $sumber_materi = "SUMBER MATERI WAJIB DIGUNAKAN (dari file yang diupload user):
\"\"\"
" . mb_substr($materi_text, 0, 15000) . "
\"\"\"
PENTING: Gunakan HANYA konten di atas sebagai sumber materi. Jangan tambahkan informasi dari luar dokumen ini.";
} else {
    $sumber_materi = "Gunakan pengetahuan Anda sebagai sumber materi untuk topik: {$topik}.";
}

$user_prompt = "TOPIK MATERI: {$topik}

{$sumber_materi}

TEMPLATE RPP:
\"\"\"
{$template_text}
\"\"\"

Tuliskan ulang seluruh template di atas dengan mematuhi <RULES>. TANPA kata pengantar/penutup AI. Langsung output dokumennya SECARA UTUH DAN LENGKAP SAMPAI TITIK TERAKHIR TEMPLATE TANPA ADA BAGIAN YANG TERPOTONG ATAU TERLEWATKAN. JANGAN BERHENTI MENULIS SEBELUM TEMPLATE SELESAI!";
$ai_text = '';
$success = false;
$last_error = '';

// =========================================================================
// 3. EKSEKUSI INTERNAL LLM MELALUI KONEKSI SIKA AI
// =========================================================================
include_once '../llm/api/koneksi_gemini.php';

$full_prompt = "[SISTEM INSTRUKSI MUTLAK]\n" . $system_instruction . "\n\n[PERINTAH USER]\n" . $user_prompt;

$ai_reply = executeInternalLLM($full_prompt, null, 0.3, $conn, $cfg, "xieqaLLM-HIBRYT", "", "", "");

if ($ai_reply && $ai_reply !== "FAIL" && strpos($ai_reply, "PEMBERITAHUAN SISTEM:") !== 0 && strpos($ai_reply, "Sistem mendeteksi") !== 0 && strpos($ai_reply, "Akses internal") !== 0 && strpos($ai_reply, "ERROR:") !== 0) {
    $ai_text = $ai_reply;
    $success = true;
} else {
    $last_error = $ai_reply;
    $success = false;
}

// =========================================================================
// 4. HASIL AKHIR & PENCATATAN LOG LIMIT
// =========================================================================
if ($success) {
    // Berhasil? Catat penggunaan agar kuota 12 jam berkurang
    $stmt_log = $conn->prepare("INSERT INTO rpp_usage_log (user_id) VALUES (?)");
    $stmt_log->bind_param("s", $user_id);
    $stmt_log->execute();
    $stmt_log->close();

    echo json_encode(['status' => 'success', 'jawaban' => $ai_text], JSON_INVALID_UTF8_SUBSTITUTE);
} else {
    echo json_encode(['error' => 'Gagal memproses Templat: ' . $last_error], JSON_INVALID_UTF8_SUBSTITUTE);
}
?>