<?php

namespace App\Controllers\Admin;

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

class Berita extends BaseController
{
    protected $beritaModel;

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

    // Tabel daftar berita di dashboard admin
    public function index()
{
    $db = \Config\Database::connect();

    // 1. Ambil semua berita untuk tabel manajemen
    $berita = $this->beritaModel->orderBy('tanggal_post', 'DESC')->findAll();

    // 2. Ambil 5 Berita Terpopuler berdasarkan Like untuk Rekap
    $top_berita = $this->beritaModel->orderBy('likes', 'DESC')->limit(5)->find();

    // 3. Ambil data untuk Grafik (Judul, View, dan Like)
    // Kita batasi 10 berita terbaru agar grafik tidak terlalu penuh/sesak
    $statistik = $this->beritaModel->orderBy('tanggal_post', 'DESC')->limit(10)->find();

    $data = [
        'title'      => 'Manajemen & Statistik Berita',
        'berita'     => $berita,
        'top_berita' => $top_berita,
        'statistik'  => $statistik,
        'total_berita' => $this->beritaModel->countAllResults()
    ];

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

    public function tambah()
    {
        return view('admin/berita/tambah', ['title' => 'Tambah Berita']);
    }
    public function simpan()
{
    $files = $this->request->getFileMultiple('gambar');
    $judul = $this->request->getPost('judul');
    $ringkasan = $this->request->getPost('ringkasan');
    $namaKolase = 'berita_' . time() . '.jpg';
    $pathFinal = 'assets/img/berita/' . $namaKolase;

    // 1. BUAT KANVAS DASAR (Ukuran 1200x800)
    $canvas = imagecreatetruecolor(1200, 800);
    $putih = imagecolorallocate($canvas, 255, 255, 255);
    imagefill($canvas, 0, 0, $putih);

    // 2. SUSUN FOTO KE KOLASE (Maksimal 4 foto)
    $i = 0;
    foreach ($files as $file) {
        if ($file->isValid() && $i < 4) {
            $imgSrc = imagecreatefromstring(file_get_contents($file->getTempName()));
            // Posisi Kotak: 0=KiriAtas, 1=KananAtas, 2=KiriBawah, 3=KananBawah
            $posX = ($i % 2 == 0) ? 0 : 600;
            $posY = ($i < 2) ? 0 : 400;
            imagecopyresampled($canvas, $imgSrc, $posX, $posY, 0, 0, 600, 400, imagesx($imgSrc), imagesy($imgSrc));
            $i++;
        }
    }
    imagejpeg($canvas, $pathFinal, 90); // Simpan sementara hasil kolasenya
    imagedestroy($canvas);

    // 3. TAMBAHKAN OVERLAY TEKS (Efek Canva Otomatis)
    $image = \Config\Services::image();
    
    // A. Tambahkan Judul di Tengah (Teks Besar & Tebal)
    $image->withFile($pathFinal)
          ->text($judul, [
              'color'      => '#ffffff',
              'withShadow' => true,
              'hAlign'     => 'center',
              'vAlign'     => 'center',
              'fontSize'   => 35, // Ukuran Judul
              'padding'    => 0
          ])
          ->save($pathFinal);

    // B. Tambahkan Ringkasan di Bawah Judul (Teks Kecil)
    if ($ringkasan) {
        $image->withFile($pathFinal)
              ->text(substr($ringkasan, 0, 100) . '...', [
                  'color'      => '#f0f0f0',
                  'withShadow' => true,
                  'hAlign'     => 'center',
                  'vAlign'     => 'center',
                  'padding'    => -60, // Menaruh tepat di bawah judul
                  'fontSize'   => 14
              ])
              ->save($pathFinal);
    }

    // 4. SIMPAN DATA KE DATABASE[cite: 4, 6]
    $this->beritaModel->save([
        'judul'        => $judul,
        'slug'         => url_title($judul, '-', true),
        'ringkasan'    => $ringkasan,
        'isi_berita'   => $this->request->getPost('isi_berita'),
        'gambar'       => $namaKolase,
        'caption_foto' => $this->request->getPost('caption_foto'),
        'status'       => $this->request->getPost('status'),
        'tanggal_post' => date('Y-m-d H:i:s')
    ]);

    return redirect()->to(base_url('admin/berita'))->with('success', 'Berita Kolase Estetik Berhasil Terbit!');
}

public function update()
{
    $id = $this->request->getPost('id_berita');
    $judul = $this->request->getPost('judul');
    $ringkasan = $this->request->getPost('ringkasan');
    $files = $this->request->getFileMultiple('gambar'); // Mendukung banyak foto
    $gambarLama = $this->request->getPost('gambarLama');

    // Cek apakah ada file baru yang diunggah (error 4 berarti tidak ada file)
    $isNewUpload = false;
    if (isset($files[0]) && $files[0]->getError() != 4) {
        $isNewUpload = true;
    }

    if (!$isNewUpload) {
        // Jika tidak upload foto baru, pakai foto lama
        $namaGambarFinal = $gambarLama;
    } else {
        // PROSES KOLASE ESTETIK BARU
        $namaGambarFinal = 'berita_' . time() . '.jpg';
        $pathFinal = 'assets/img/berita/' . $namaGambarFinal;

        // Buat Kanvas (1200x800)
        $canvas = imagecreatetruecolor(1200, 800);
        $putih = imagecolorallocate($canvas, 255, 255, 255);
        imagefill($canvas, 0, 0, $putih);

        $i = 0;
        foreach ($files as $file) {
            if ($file->isValid() && $i < 4) {
                $imgSrc = imagecreatefromstring(file_get_contents($file->getTempName()));
                $posX = ($i % 2 == 0) ? 0 : 600;
                $posY = ($i < 2) ? 0 : 400;
                imagecopyresampled($canvas, $imgSrc, $posX, $posY, 0, 0, 600, 400, imagesx($imgSrc), imagesy($imgSrc));
                $i++;
            }
        }
        imagejpeg($canvas, $pathFinal, 90);
        imagedestroy($canvas);

        // Tambahkan Overlay Teks Estetik
        $image = \Config\Services::image();
        $image->withFile($pathFinal)
              ->text($judul, [
                  'color'      => '#ffffff',
                  'withShadow' => true,
                  'hAlign'     => 'center',
                  'vAlign'     => 'center',
                  'fontSize'   => 35
              ])
              ->save($pathFinal);

        // Hapus file fisik foto lama jika bukan default
        if ($gambarLama != 'default.jpg' && file_exists('assets/img/berita/' . $gambarLama)) {
            @unlink('assets/img/berita/' . $gambarLama);
        }
    }

    // Update data ke Database[cite: 4, 6]
    $this->beritaModel->update($id, [
        'judul'        => $judul,
        'slug'         => url_title($judul, '-', true),
        'ringkasan'    => $ringkasan,
        'isi_berita'   => $this->request->getPost('isi_berita'),
        'gambar'       => $namaGambarFinal,
        'caption_foto' => $this->request->getPost('caption_foto'),
        'status'       => $this->request->getPost('status'),
        'tanggal_post' => $this->request->getPost('tanggal_post') ?: date('Y-m-d H:i:s')
    ]);

    return redirect()->to(base_url('admin/berita'))->with('success', 'Berita dan Layout Foto berhasil diperbarui.');
}
    public function edit($id)
{
    $data = [
        'title'  => 'Edit Berita',
        'berita' => $this->beritaModel->find($id)
    ];
    return view('admin/berita/edit', $data); // Pastikan view-nya juga ada
}

    public function hapus($id)
    {
        $berita = $this->beritaModel->find($id);
        if ($berita['gambar'] != 'default.jpg') {
            @unlink('assets/img/berita/' . $berita['gambar']);
        }
        $this->beritaModel->delete($id);
        return redirect()->to(base_url('admin/berita'))->with('success', 'Berita berhasil dihapus.');
    }
}