<?php
// File: public/ai-logic.php

// 1. Mulai Buffer & Matikan Error Tampil
ob_start(); // Tangkap semua output
error_reporting(0);
ini_set('display_errors', 0);

// 2. Setup Header
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST');

try {
    // 3. Tangkap Input
    $input = file_get_contents('php://input');
    $data = json_decode($input, true);

    if (!$data) {
        throw new Exception('Data input kosong atau format salah.');
    }

    // --- CONFIG GROQ ---
    $apiKey = "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"; 
    $model  = "llama-3.3-70b-versatile"; 
    $url    = "https://api.groq.com/openai/v1/chat/completions";

    // --- DATA DARI FORM ---
    $subject     = $data['subject_name'] ?? '-';
    $topic       = $data['topic'] ?? '-';
    $elemen      = $data['elemen'] ?? '-';
    $models      = $data['model_learning'] ?? '-';
    $method      = $data['method_learning'] ?? '-';
    $strategy    = $data['strategy_learning'] ?? '-';
    $approach    = $data['approach_learning'] ?? '-';
    $environment = $data['learning_environtment'] ?? '-'; 
    $digital     = $data['digital_usage'] ?? '-';
    $dimensi     = $data['profil_pelajar_pancasila'] ?? '-'; 
    $pertemuan   = $data['meeting_sequence'] ?? '-';
    $jp          = $data['allocation_jp'] ?? '-';
    $durasi      = $data['duration_minutes'] ?? '-';
    $tp          = $data['tp_text'] ?? '-';

    // --- PROMPT ---
    $prompt = " Kamu adalah seorang guru Profesional. Buatlan Modul Ajar Kurikulum Merdeka yang sangat detail dengan sudut pandang guru sesuai dengan modul ajar yang berlaku di indonesia.
    Informasi Umum:
    - Mapel: $subject (Pertemuan ke-$pertemuan)
    - Topik: $topic
    - Tujuan Pembelajaran (TP): $tp
    - Dimensi Profil Lulusan: $dimensi

    Metodologi:
    - Model: $models
    - Metode: $method
    - Strategi: $strategy
    - Pendekatan: $approach
    - Lingkungan: $environment
    - Pemanfaatan Digital (TIK): $digital

    Sesuaikan modul ajar yang dibuat dengan durasi total (kegiatan awal hingga kegiatan penutup) total_durasi = $jp x $durasi menit. 
    buat dengan poin-poin. 
	gunakan kalimat aktif, dan kalimat penting. Buat lengkap dan sesuaikan langkah-langkah yang sesuai. 
	pada activity_initial, jelaskan dengan rinci kegiatan awal yang dilakukan oleh guru dan siswa dalam pembelajaran. 
	buat penjelasan dan langkah-langkah untuk activity_core understand, activity_core_apply, activity_core_reflect yang panjang dan mendetail dan sesuaikan dengan metodologi (model, metode, strategi, pendekatan, lingkungan, dan pemanfaatan digital) yang ada di atas (text metodologi tidak perlu di jelaskan di langkah-langkah cukup penerapannya saja). 
	setiap baris langkah/paragraf buat bullet (-), namun hilangkan spasi antar bullet. 
	tambahkan durasi untuk setiap kegiatan (initial, core dan closing) dengan pembagian.
		- total_durasi = $jp x $durasi min
		- initial_durasi = 10 min
		- closing_durasi = 10 min
		- core_durasi = total_durasi - 20 min       
        - core_durasi = core_understand + core_apply + core_reflect 

	hasil perkalian core_understand, core_apply, core_reflect tidak usah di tampilkan. langsung tampilkan hasil saja. 
        
	text durasi diletakkan di awal paragraf kegiatan tanpa ada bullet dengan bentuk penulisan seperti ini :
		Durasi :       menit
    
    INSTRUKSI FORMAT JSON (PENTING):
    1. Output HANYA JSON.
    2. Isi konten HARUS STRING PANJANG, JANGAN ARRAY.
    3. Gunakan '\\n' untuk baris baru.
    
    Structure JSON:
    {
      \"activity_initial\": \"...teks paragraf/poin...\",
      \"activity_core_understand\": \"...teks paragraf/poin...\",
      \"activity_core_apply\": \"...teks paragraf/poin...\",
      \"activity_core_reflect\": \"...teks paragraf/poin...\",
      \"activity_closing\": \"...teks paragraf/poin...\"
    }";

    // --- CURL ---
    $postData = [
        "model" => $model,
        "messages" => [
            ["role" => "system", "content" => "You are a backend API that outputs strictly valid JSON. Do not use Markdown."],
            ["role" => "user", "content" => $prompt]
        ],
        "temperature" => 0.6,
        "response_format" => ["type" => "json_object"]
    ];

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json"
    ]);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postData));
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_TIMEOUT, 60);

    $response = curl_exec($ch);
    $curlErr = curl_error($ch);
    curl_close($ch);

    if ($curlErr) throw new Exception("Terjadi kesalahan : $curlErr");

    // --- CLEANING & FLATTENING (SOLUSI OBJECT OBJECT) ---
    $result = json_decode($response, true);
    $rawContent = $result['choices'][0]['message']['content'] ?? '';
    
    // Hapus markdown ```json
    $cleanContent = str_replace(['```json', '```'], '', $rawContent);
    $jsonObj = json_decode($cleanContent, true);

    if (json_last_error() !== JSON_ERROR_NONE) {
        // Fallback jika JSON rusak, kirim error
        throw new Exception("Terjadi kesalahan, coba lagi nanti!" . substr($rawContent, 0, 50));
    }

    $finalOutput = [];
    // Loop setiap key untuk memastikan jadi STRING biasa
    foreach ($jsonObj as $key => $val) {
        if (is_array($val)) {
            // Jika array, gabung jadi string dengan enter
            $finalOutput[$key] = implode("\n", $val); 
        } elseif (is_object($val)) {
            // Jika object, paksa jadi array lalu string
            $finalOutput[$key] = implode("\n", (array)$val);
        } else {
            // Jika sudah string, aman
            $finalOutput[$key] = (string)$val;
        }
    }

    // --- FINAL OUTPUT ---
    ob_clean(); // Hapus output sampah sebelumnya (PENTING!)
    echo json_encode($finalOutput);

} catch (Exception $e) {
    ob_clean(); // Hapus output sampah
    http_response_code(500);
    echo json_encode(['error' => $e->getMessage()]);
}
?>