<?php

namespace App\Controllers;

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

class Katalog extends BaseController
{
    protected $buku;
    protected $ruangBaca;
    protected $anggota;
    protected $pengunjung;

    public function __construct()
    {
        $this->buku = new BukuModel();
        $this->ruangBaca = new RuangBacaModel();
        $this->anggota = new AnggotaModel();
        $this->pengunjung = new PengunjungModel();
    }

    /**
     * Catat kunjungan otomatis saat siswa/guru yang sudah menjadi
     * anggota membuka katalog (secara online).
     */
    private function daftarkanKunjungan()
    {
        // Hanya berlaku untuk guru/siswa yang login
        $role = session()->get('role');

        if (!in_array($role, ['guru', 'siswa'])) {
            return;
        }

        $namaUser = session()->get('nama');

        // Cari apakah user sudah terdaftar sebagai anggota
        $anggota = $this->anggota
            ->where('nama', $namaUser)
            ->first();

        if (!$anggota) {
            return;
        }

        // Cegah duplikasi: hanya 1 catatan per hari (konsisten sistem pengunjung)
        $sudah = $this->pengunjung
            ->where('anggota_id', $anggota['id'])
            ->where('tanggal', date('Y-m-d'))
            ->first();

        if ($sudah) {
            return;
        }

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

    public function index()
    {
        // Catat kunjungan otomatis
        $this->daftarkanKunjungan();

        // Hanya tampilkan buku yang masih ada stoknya
        $semuaBuku = $this->buku->findAll();

        $bukuTersedia = [];

        foreach ($semuaBuku as $b) {
            if ((int) $b['stok'] > 0) {
                $bukuTersedia[] = $b;
            }
        }

        $data = [
            'buku' => $bukuTersedia,
        ];

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

public function ruangBaca()
    {
        // Catat kunjungan otomatis
        $this->daftarkanKunjungan();

        $data = [
            'ruang_baca' => $this->ruangBaca->findAll(),
        ];

        return view('katalog/ruang_baca', $data);
    }

    public function daftar()
    {
        $role      = session()->get('role');
        $namaUser  = session()->get('nama');

        // Cek apakah sudah terdaftar sebagai anggota
        $sudah = $this->anggota
            ->where('nama', $namaUser)
            ->first();

        $data = [
            'role'  => $role,
            'sudah' => $sudah,
        ];

        return view('katalog/daftar_anggota', $data);
    }

    public function storeDaftar()
    {
        $role     = session()->get('role');
        $nama     = session()->get('nama');
        $namaForm = $this->request->getPost('nama');
        $nisn     = $this->request->getPost('nisn');
        $kelas    = $this->request->getPost('kelas');
        $alamat   = $this->request->getPost('alamat');

        // Cegah duplikasi berdasarkan nama user
        $sudah = $this->anggota
            ->where('nama', $nama)
            ->first();

        if ($sudah) {
            return redirect()->to('/katalog/daftar')
                ->with('error', 'Anda sudah terdaftar sebagai anggota perpustakaan.');
        }

        // Cek NISN agar tidak ganda
        if (!empty($nisn)) {
            $cekNisn = $this->anggota
                ->where('nisn', $nisn)
                ->first();

            if ($cekNisn) {
                return redirect()->to('/katalog/daftar')
                    ->with('error', 'NISN / NIP sudah terdaftar sebagai anggota.');
            }
        }

        $jenis = ($role == 'guru') ? 'Guru' : 'Siswa';

        // Upload foto (opsional)
        $namaFoto = '';
        $foto     = $this->request->getFile('foto');

        if ($foto && $foto->isValid() && !$foto->hasMoved()) {
            $namaFoto = $foto->getRandomName();
            $foto->move(FCPATH . 'uploads/anggota', $namaFoto);
        }

        $this->anggota->save([
            'foto'   => $namaFoto,
            'nama'   => $namaForm ?: $nama,
            'nisn'   => $nisn,
            'jenis'  => $jenis,
            'kelas'  => $kelas,
            'alamat' => $alamat,
        ]);

        return redirect()->to('/katalog/daftar')
            ->with('success', 'Pendaftaran berhasil! Anda sekarang terdaftar sebagai anggota perpustakaan.');
    }
}
