<?php

namespace App\Controllers;

use App\Controllers\BaseController;
use App\Models\PengunjungModel;
use App\Models\AnggotaModel;

class Pengunjung extends BaseController
{
    protected $pengunjung;
    protected $anggota;
    protected $db;

    public function __construct()
    {
        $this->pengunjung = new PengunjungModel();
        $this->anggota = new AnggotaModel();
        $this->db = \Config\Database::connect();
    }

    public function index()
    {
        $pengunjung = $this->db
            ->table('pengunjung')
            ->select('
                pengunjung.id,
                pengunjung.anggota_id,
                anggota.nama,
                anggota.jenis,
                anggota.kelas,
                pengunjung.tanggal,
                pengunjung.jam_masuk
            ')
            ->join('anggota', 'anggota.id = pengunjung.anggota_id')
            ->orderBy('pengunjung.id', 'DESC')
            ->get()
            ->getResultArray();

        return view('pengunjung/index', [
            'pengunjung' => $pengunjung
        ]);
    }

    public function search()
    {
        $keyword = trim($this->request->getGet('term') ?? '');

        if ($keyword === '') {
            return $this->response->setJSON([]);
        }

        $data = $this->anggota
            ->select('id, nama, jenis, kelas')
            ->like('nama', $keyword)
            ->orderBy('nama', 'ASC')
            ->findAll(10);

        return $this->response->setJSON($data);
    }

    public function store()
    {
        $nama = trim($this->request->getPost('nama') ?? '');

        if ($nama === '') {
            return redirect()->back()
                ->withInput()
                ->with('error', 'Pilih nama anggota terlebih dahulu.');
        }

        $anggota = $this->anggota
            ->where('nama', $nama)
            ->first();

        if (!$anggota) {
            return redirect()->back()
                ->withInput()
                ->with('error', 'Nama anggota tidak ditemukan. Silakan pilih nama dari daftar.');
        }

        $anggota_id = $anggota['id'];

        $cek = $this->pengunjung
            ->where('anggota_id', $anggota_id)
            ->where('tanggal', date('Y-m-d'))
            ->first();

        if ($cek) {
            return redirect()->back()
                ->withInput()
                ->with('error', 'Pengunjung tersebut sudah tercatat hari ini.');
        }

        $this->pengunjung->insert([
            'anggota_id' => $anggota_id,
            'tanggal'    => date('Y-m-d'),
            'jam_masuk'  => date('H:i:s')
        ]);

        return redirect()
            ->to('/pengunjung')
            ->with('success', 'Pengunjung berhasil ditambahkan.');
    }

    public function delete($id)
    {
        $data = $this->pengunjung->find($id);

        if (!$data) {
            return redirect()
                ->to('/pengunjung')
                ->with('error', 'Data pengunjung tidak ditemukan.');
        }

        $this->pengunjung->delete($id);

        return redirect()
            ->to('/pengunjung')
            ->with('success', 'Data pengunjung berhasil dihapus.');
    }
}
