<?php

// app/Http/Controllers/LkpdController.php

namespace App\Http\Controllers;

use App\Models\Lkpd;
use App\Models\Subject; // Pastikan Model Subject ada
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http; 
use App\Models\SchoolProfile;
use Carbon\Carbon;
use Illuminate\Support\Facades\Auth;

class LkpdController extends Controller
{
    // 1. TAMPILKAN HALAMAN UTAMA
    public function index()
{
    // 1. Ambil User yang sedang login
    $user = auth()->user();

    // 2. Ambil daftar ID Mapel yang diajar guru tersebut
    // pluck('subjects.id') akan menghasilkan array contoh: [1, 3, 5]
    // Jika user->subjects belum di-load, kita panggil relasinya.
    $teacherSubjectIds = $user->subjects()->pluck('subjects.id');

    // 3. Ambil LKPD yang subject_id-nya ada di dalam daftar tadi
    // Kita pakai 'whereIn' (bukan where biasa) agar mendukung banyak mapel sekaligus
    $lkpds = Lkpd::with('subject')
                ->whereIn('subject_id', $teacherSubjectIds)
                ->latest()
                ->get();

    // 4. Data Mapel untuk Dropdown (Hanya mapel yang diajar)
    $subjects = $user->subjects; 

    return view('pages.perangkat.lkpd.index', compact('lkpds', 'subjects'));
    }

    // 2. SIMPAN DATA BARU
    public function store(Request $request)
    {
        $validated = $request->validate([
            'subject_id' => 'required|exists:subjects,id',
            'title' => 'required|string|max:255',
            'type' => 'required',
            'mode' => 'required',
            'activity_steps' => 'required', // Wajib ada isinya
        ]);

        // Simpan field nullable lainnya
        $data = $request->all();
        
        Lkpd::create($data);

        return redirect()->back()->with('success', 'LKPD berhasil dibuat!');
    }

    // 3. UPDATE DATA
    public function update(Request $request, $id)
    {
        $lkpd = Lkpd::findOrFail($id);
        $lkpd->update($request->all());
        
        return redirect()->back()->with('success', 'LKPD berhasil diperbarui.');
    }

    // 4. HAPUS DATA
    public function destroy($id)
    {
        Lkpd::findOrFail($id)->delete();
        return redirect()->back()->with('success', 'LKPD dihapus.');
    }

    // 5. CETAK MASSAL (LOGIC SEDERHANA)
    public function printBulk(Request $request)
        {
            $ids = $request->lkpd_ids;
            
            // Validasi: Pastikan ada yang dicentang
            if(!$ids) {
                return redirect()->back()->with('error', 'Pilih minimal satu LKPD untuk dicetak.');
            }

            // Ambil data berdasarkan ID yang dicentang
            $data = Lkpd::with('subject')->whereIn('id', $ids)->get();

            // Tampilkan View Cetak
            return view('pages.perangkat.lkpd.print', compact('data'));
        }

    // ==========================================
    // 6. FITUR GENERATOR AI (BRAINWARE)
    // ==========================================
    public function generateAi(Request $request)
    {
        $mapel = $request->mapel;
        $topik = $request->topik;
        $materi = $request->materi;
        $jenis = $request->jenis; // eksperimen/proyek
        
        // --- OPSI A: MODE SIMULASI (Tanpa API Key - Hemat Biaya) ---
        // Gunakan ini untuk testing codingan JS & View dulu.
        
        /* sleep(2); // Pura-pura mikir 2 detik
        return response()->json([
            'tujuan' => "1. Memahami konsep dasar $topik pada $mapel.\n2. Menganalisis cara kerja $materi secara langsung.",
            'alat' => "- Multimeter\n- Obeng Set\n- Kabel Jumper\n- Modul $materi",
            'langkah' => "1. Siapkan semua alat dan bahan di meja kerja.\n2. Lakukan kalibrasi pada alat ukur.\n3. Rangkai komponen sesuai skema $materi.\n4. Amati perubahan yang terjadi dan catat pada tabel pengamatan.",
            'diskusi' => "1. Mengapa terjadi perbedaan hasil ukur?\n2. Apa kesimpulan dari percobaan $topik ini?"
        ]);
        */

        // --- OPSI B: MODE LIVE (Pakai Google Gemini / OpenAI) ---
        // Pastikan punya API KEY. Contoh pakai Gemini via HTTP Client:
        
        $apiKey = env('GEMINI_API_KEY'); // Simpan di .env
        $prompt = "Buatkan konten LKPD (Lembar Kerja Peserta Didik) untuk siswa SMK.
                   Mapel: $mapel. Topik: $topik. Detail Materi: $materi.
                   Jenis Kegiatan: $jenis.
                   
                   Output WAJIB JSON murni dengan format keys:
                   {
                     'tujuan': 'daftar tujuan (string panjang/poin)',
                     'alat': 'daftar alat bahan (string)',
                     'langkah': 'langkah kerja detail (string)',
                     'diskusi': 'pertanyaan diskusi (string)'
                   }
                   Gunakan Bahasa Indonesia.";

        try {
            // Contoh Call ke Gemini API (Bisa diganti OpenAI)
            $response = Http::withHeaders(['Content-Type' => 'application/json'])
                ->post("https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key={$apiKey}", [
                    'contents' => [
                        ['parts' => [['text' => $prompt]]]
                    ]
                ]);

            $result = $response->json();
            
            // Parsing Logic (Tergantung respon AI, ini contoh kasar)
            $rawText = $result['candidates'][0]['content']['parts'][0]['text'] ?? '{}';
            
            // Bersihkan markdown json jika ada (```json ... ```)
            $cleanJson = str_replace(['```json', '```'], '', $rawText);
            $data = json_decode($cleanJson, true);

            return response()->json($data);

        } catch (\Exception $e) {
            return response()->json(['error' => 'Gagal menghubungi AI: ' . $e->getMessage()], 500);
        }
    }
    // app/Http/Controllers/LkpdController.php


}