<?php

namespace App\Controllers;

use App\Models\BeritaModel;

class Berita extends BaseController
{
    protected $beritaModel;
    
    // Memuat helper agar fungsi character_limiter dan base_url aktif
    protected $helpers = ['text', 'url'];

    public function __construct()
    {
        $this->beritaModel = new BeritaModel();
    }

    /**
     * Menampilkan semua berita untuk Publik
     * URL: apps.smkn1sukalarang.sch.id/berita
     */
    public function index()
    {
        $data = [
            'title'  => 'Berita & Kegiatan - SMKN 1 Sukalarang',
            // Hanya mengambil berita yang statusnya 'publish'
            'berita' => $this->beritaModel->where('status', 'publish')
                                          ->orderBy('tanggal_post', 'DESC')
                                          ->findAll()
        ];

        return view('berita_index', $data);
    }

    /**
     * Menampilkan isi berita secara lengkap
     * URL: apps.smkn1sukalarang.sch.id/berita/judul-berita
     */
    public function detail($slug)
{
    // 1. Cari berita berdasarkan slug dan status publish
    $berita = $this->beritaModel->where('slug', $slug)
                                ->where('status', 'publish')
                                ->first();

    if (!$berita) {
        throw \CodeIgniter\Exceptions\PageNotFoundException::forPageNotFound("Berita tidak ditemukan.");
    }

    // --- MULAI SISTEM MONITORING STATISTIK ---
    
    // A. Ambil Data Teknis Pengunjung
    // Ambil library UserAgent
$agent = $this->request->getUserAgent();
$ip    = $this->request->getIPAddress();

// Tentukan jenis perangkat dengan cara yang lebih aman
if ($agent->isMobile()) {
    $perangkat = 'Mobile';
} else {
    // Jika bukan mobile, kita asumsikan sebagai Desktop
    // (Pengecekan isTablet ditiadakan karena sering menyebabkan error)
    $perangkat = 'Desktop';
}

$browser = $agent->getBrowser() . ' ' . $agent->getVersion();


    // B. Deteksi Lokasi (Negara & Kota) via API ip-api.com
    // Menggunakan @ untuk menghindari error jika koneksi internet server sedang gangguan
    $geo    = @json_decode(file_get_contents("http://ip-api.com/json/{$ip}"));
    $negara = ($geo && $geo->status == 'success') ? $geo->country : 'Unknown';
    $kota   = ($geo && $geo->status == 'success') ? $geo->city : 'Unknown';

    // C. Simpan Log Kunjungan ke Tabel statistik_pengunjung
    $db = \Config\Database::connect();
    $db->table('statistik_pengunjung')->insert([
        'ip_address'    => $ip,
        'perangkat'     => $perangkat,
        'browser'       => $browser,
        'negara'        => $negara,
        'kota'          => $kota,
        'url_tujuan'    => current_url(),
        'waktu_kunjung' => date('Y-m-d H:i:s')
    ]);

    // D. Update Total Views di Tabel Berita (Skrip asli Bapak tetap terjaga)
    $currentViews = $berita['views'] ?? 0;
    $this->beritaModel->update($berita['id_berita'], [
        'views' => $currentViews + 1
    ]);

    // --- AKHIR SISTEM MONITORING ---

    // 2. Ambil komentar yang sudah di-ACC admin
    $komentar = $db->table('komentar')
                   ->where(['id_berita' => $berita['id_berita'], 'status' => 'publish'])
                   ->orderBy('created_at', 'DESC')
                   ->get()
                   ->getResultArray();

    // 3. Siapkan data untuk dikirim ke View
    $data = [
        'title'    => $berita['judul'] . ' - SMKN 1 Sukalarang',
        'berita'   => $berita,
        'komentar' => $komentar
    ];

    return view('berita_detail', $data);
}
public function like($id)
{
    if ($this->request->isAJAX()) {
        $berita = $this->beritaModel->find($id);
        $new_likes = ($berita['likes'] ?? 0) + 1;

        $this->beritaModel->update($id, [
            'likes' => $new_likes
        ]);

        return $this->response->setJSON([
            'success' => true,
            'new_likes' => $new_likes
        ]);
    }
}
public function simpan_komentar()
{
    // 1. Ambil data dari form
    $id_berita    = $this->request->getPost('id_berita');
    $nama         = $this->request->getPost('nama');
    $email        = $this->request->getPost('email');
    $isi_komentar = $this->request->getPost('isi_komentar');

    // 2. Hubungkan ke database secara manual karena tidak lewat model khusus
    $db = \Config\Database::connect();
    
    // 3. Masukkan data ke tabel komentar
    $db->table('komentar')->insert([
        'id_berita'    => $id_berita,
        'nama'         => $nama,
        'email'        => $email,
        'isi_komentar' => $isi_komentar,
        'status'       => 'pending', // Default agar tidak langsung tampil
        'created_at'   => date('Y-m-d H:i:s')
    ]);

    // 4. Kembali ke halaman berita dengan pesan sukses
    return redirect()->back()->with('success_komentar', 'Komentar Anda telah terkirim dan menunggu moderasi admin.');
}
}