<?php

namespace App\Controllers\Admin;

use App\Models\Galeri_model;
use App\Models\Kategori_galeri_model;

class Galeri extends BaseController
{
    // index
    public function index()
    {
        checklogin();
        $m_galeri          = new Galeri_model();
        $m_kategori_galeri = new Kategori_galeri_model();
        $galeri            = $m_galeri->listing();
        $total             = $m_galeri->total();

        $data = ['title' => 'Konfigurasi Foto (' . $total . ')',
            'galeri'     => $galeri,
            'content'    => 'admin/galeri/index',
        ];
        echo view('admin/layout/wrapper', $data);
    }

    // Tambah
    public function tambah()
    {
        checklogin();
        $m_galeri          = new Galeri_model();
        $m_kategori_galeri = new Kategori_galeri_model();
        $kategori_galeri   = $m_kategori_galeri->listing();
    
        if ($this->request->getMethod() === 'post' && $this->validate(
            [
                'judul_galeri' => 'required',
                'gambar' => [
                    'uploaded[gambar]',
                    'mime_in[gambar,image/jpg,image/jpeg,image/gif,image/png]',
                    'max_size[gambar,4096]',
                ],
            ]
        )) {
            $id_kategori_input = $this->request->getVar('id_kategori_galeri');
            
            $nama_kategori_input = '';
            foreach ($kategori_galeri as $k) {
                if ($k['id_kategori_galeri'] == $id_kategori_input) {
                    $nama_kategori_input = $k['nama_kategori_galeri'];
                    break;
                }
            }
    
            if (! empty($_FILES['gambar']['name'])) {
                $avatar   = $this->request->getFile('gambar');
                $namabaru = str_replace(' ', '-', $avatar->getName());
                $avatar->move(WRITEPATH . '../assets/upload/image/', $namabaru);
                
                $image = \Config\Services::image()
                    ->withFile(WRITEPATH . '../assets/upload/image/' . $namabaru)
                    ->fit(100, 100, 'center')
                    ->save(WRITEPATH . '../assets/upload/image/thumbs/' . $namabaru);
                    
                $data = [
                    'id_user'            => $this->session->get('id_user'),
                    'id_kategori_galeri' => $id_kategori_input,
                    'judul_galeri'       => $this->request->getVar('judul_galeri'),
                    'jenis_galeri'       => $nama_kategori_input, 
                    'isi'                => $this->request->getVar('isi'),
                    'gambar'             => $namabaru,
                    'website'            => $this->request->getVar('website'),
                    'status_text'        => $this->request->getVar('status_text'),
                    'tanggal_post'       => date('Y-m-d H:i:s'),
                ];
                $m_galeri->tambah($data);
    
                return redirect()->to(base_url('admin/galeri'))->with('sukses', 'Data Berhasil di Simpan');
            }
            
            // Jika tidak ada gambar yang diupload
            $data = [
                'id_user'            => $this->session->get('id_user'),
                'id_kategori_galeri' => $id_kategori_input,
                'judul_galeri'       => $this->request->getVar('judul_galeri'),
                'jenis_galeri'       => $nama_kategori_input,
                'isi'                => $this->request->getVar('isi'),
                'website'            => $this->request->getVar('website'),
                'status_text'        => $this->request->getVar('status_text'),
                'tanggal_post'       => date('Y-m-d H:i:s'),
            ];
            $m_galeri->tambah($data);
    
            return redirect()->to(base_url('admin/galeri'))->with('sukses', 'Data Berhasil di Simpan');
        }
    
        $data = [
            'title'           => 'Tambah Galeri',
            'kategori_galeri' => $kategori_galeri,
            'content'         => 'admin/galeri/tambah',
        ];
        echo view('admin/layout/wrapper', $data);
    }

    // edit
    public function edit($id_galeri)
    {
        checklogin();
        $m_kategori_galeri = new Kategori_galeri_model();
        $m_galeri          = new Galeri_model();
        $kategori_galeri   = $m_kategori_galeri->listing();
        $galeri            = $m_galeri->detail($id_galeri);
        
        if ($this->request->getMethod() === 'post' && $this->validate(
            [
                'judul_galeri' => 'required',
                'gambar' => [
                    'mime_in[gambar,image/jpg,image/jpeg,image/gif,image/png]',
                    'max_size[gambar,4096]',
                ],
            ]
        )) {
            $id_kategori_input = $this->request->getVar('id_kategori_galeri');
            
            $nama_kategori_input = '';
            foreach ($kategori_galeri as $k) {
                if ($k['id_kategori_galeri'] == $id_kategori_input) {
                    $nama_kategori_input = $k['nama_kategori_galeri'];
                    break;
                }
            }
    
            if (! empty($_FILES['gambar']['name'])) {
                $avatar   = $this->request->getFile('gambar');
                $namabaru = str_replace(' ', '-', $avatar->getName());
                $avatar->move(WRITEPATH . '../assets/upload/image/', $namabaru);
                
                $image = \Config\Services::image()
                    ->withFile(WRITEPATH . '../assets/upload/image/' . $namabaru)
                    ->fit(100, 100, 'center')
                    ->save(WRITEPATH . '../assets/upload/image/thumbs/' . $namabaru);
                    
                // masuk database
                $data = [
                    'id_galeri'          => $id_galeri,
                    'id_user'            => $this->session->get('id_user'),
                    'id_kategori_galeri' => $id_kategori_input,
                    'judul_galeri'       => $this->request->getVar('judul_galeri'),
                    'jenis_galeri'       => $nama_kategori_input, 
                    'isi'                => $this->request->getVar('isi'),
                    'gambar'             => $namabaru,
                    'website'            => $this->request->getVar('website'),
                    'status_text'        => $this->request->getVar('status_text'),
                ];
                $m_galeri->edit($data);
    
                return redirect()->to(base_url('admin/galeri'))->with('sukses', 'Data Berhasil di Simpan');
            }
            
            $data = [
                'id_galeri'          => $id_galeri,
                'id_user'            => $this->session->get('id_user'),
                'id_kategori_galeri' => $id_kategori_input,
                'judul_galeri'       => $this->request->getVar('judul_galeri'),
                'jenis_galeri'       => $nama_kategori_input, 
                'isi'                => $this->request->getVar('isi'),
                'website'            => $this->request->getVar('website'),
                'status_text'        => $this->request->getVar('status_text'),
            ];
            $m_galeri->edit($data);
    
            return redirect()->to(base_url('admin/galeri'))->with('sukses', 'Data Berhasil di Simpan');
        }
    
        $data = [
            'title'           => 'Edit Galeri: ' . $galeri['judul_galeri'],
            'kategori_galeri' => $kategori_galeri,
            'galeri'          => $galeri,
            'content'         => 'admin/galeri/edit',
        ];
        echo view('admin/layout/wrapper', $data);
    }

    // Delete
    public function delete($id_galeri)
    {
        checklogin();
        $m_galeri = new Galeri_model();
        $data     = ['id_galeri' => $id_galeri];
        $m_galeri->delete($data);
        // masuk database
        $this->session->setFlashdata('sukses', 'Data telah dihapus');

        return redirect()->to(base_url('admin/galeri'));
    }
    
    public function moment()
    {
        // checklogin(); 
        
        $m_galeri = new Galeri_model();

        if ($this->request->getMethod() === 'post' && $this->validate(
            [
                'judul_galeri' => 'required',
                'gambar' => [
                    'uploaded[gambar]',
                    'mime_in[gambar,image/jpg,image/jpeg,image/gif,image/png,image/webp]',
                    'max_size[gambar,10240]',
                ],
            ]
        )) {
            
            if (! empty($_FILES['gambar']['name'])) {
                $avatar   = $this->request->getFile('gambar');
                
                $namabaru = $avatar->getRandomName(); 
                $avatar->move(WRITEPATH . '../assets/upload/image/', $namabaru);
                
                $image = \Config\Services::image()
                    ->withFile(WRITEPATH . '../assets/upload/image/' . $namabaru)
                    ->fit(100, 100, 'center')
                    ->save(WRITEPATH . '../assets/upload/image/thumbs/' . $namabaru);
                    
                $data = [
                    'id_user'            => $this->session->get('id_user') ?? 5, 
                    'id_kategori_galeri' => 1, 
                    
                    'judul_galeri'       => $this->request->getVar('judul_galeri'),
                    'isi'                => $this->request->getVar('isi'),
                    'gambar'             => $namabaru,
                    'jenis_galeri'       => 'Review', 
                    'status_text'        => 'Publish',
                    'website'            => '', 
                    'tanggal_post'       => date('Y-m-d H:i:s'),
                ];
                
                $m_galeri->tambah($data);

                return redirect()->to(base_url('galeri'))->with('sukses', 'Momen seru berhasil dibagikan!');
            }
            
        } else {
            session()->setFlashdata('error', 'Gagal upload! Pastikan form diisi dan ukuran foto maksimal 10MB.');
            return redirect()->to(base_url('galeri'));
        }
    }
}
