<?php

namespace App\Controllers\Admin;

use App\Controllers\BaseController;
use App\Models\BeritaModel;

class Statistik extends BaseController
{
    public function index()
    {
        $db = \Config\Database::connect();
        $beritaModel = new BeritaModel();

        // 1. Ambil data Statistik Pengunjung
        $perangkat = $db->table('statistik_pengunjung')
                        ->select('perangkat, COUNT(*) as jumlah')
                        ->groupBy('perangkat')
                        ->get()->getResultArray();

        $negara = $db->table('statistik_pengunjung')
                     ->select('negara, COUNT(*) as jumlah')
                     ->groupBy('negara')
                     ->orderBy('jumlah', 'DESC')
                     ->limit(5)
                     ->get()->getResultArray();

        $logs = $db->table('statistik_pengunjung')
                   ->orderBy('waktu_kunjung', 'DESC')
                   ->limit(10)
                   ->get()->getResultArray();

        // 2. Ambil data Statistik Berita (Views, Likes, dan Hitung Komentar)
        // Kita batasi 10 berita terbaru agar grafik tidak berat (ngelag)
        $statistik = $db->table('berita b')
            ->select('b.judul, b.views, b.likes, COUNT(k.id_komentar) as total_komentar')
            ->join('komentar k', 'k.id_berita = b.id_berita AND k.status = "publish"', 'left')
            ->groupBy('b.id_berita')
            ->orderBy('b.tanggal_post', 'DESC')
            ->limit(10)
            ->get()->getResultArray();

        // 3. Ambil Top 5 Berita berdasarkan Likes
        $top_berita = $beritaModel->orderBy('likes', 'DESC')->limit(5)->findAll();

        $data = [
            'title'      => 'Dashboard Analisis - SMKN 1 Sukalarang',
            'perangkat'  => $perangkat,
            'negara'     => $negara,
            'logs'       => $logs,
            'statistik'  => $statistik,
            'top_berita' => $top_berita,
            'total'      => $db->table('statistik_pengunjung')->countAllResults()
        ];

        return view('admin/statistik/index', $data);
    }
}