<?php

namespace App\Controllers\Api;

use App\Models\KategoriModel;
use App\Models\LogAktivitasModel;

class KategoriController extends BaseApiController
{
    protected $kategori;
    protected $log;

    public function __construct()
    {
        $this->kategori = new KategoriModel();
        $this->log      = new LogAktivitasModel();
    }

    // ======================
    // GET /kategori
    // ======================
    public function index()
    {
        return $this->respondSuccess(
            $this->kategori->orderBy('nama_kategori', 'ASC')->findAll(),
            'Data kategori'
        );
    }

    // ======================
    // POST /kategori
    // ======================
    public function store()
    {
        $data = $this->request->getJSON(true);

        if (empty($data['nama_kategori'])) {
            return $this->respondError('Nama kategori wajib diisi', 422);
        }

        $this->kategori->insert([
            'nama_kategori' => $data['nama_kategori'],
            'keterangan'    => $data['keterangan'] ?? null
        ]);

        $this->logAktivitas("Menambahkan kategori: {$data['nama_kategori']}");

        return $this->respondSuccess(null, 'Kategori berhasil ditambahkan');
    }

    // ======================
    // PUT /kategori/{id}
    // ======================
    public function update($id)
    {
        $data = $this->request->getJSON(true);

        if (!$this->kategori->find($id)) {
            return $this->respondError('Kategori tidak ditemukan', 404);
        }

        $this->kategori->update($id, [
            'nama_kategori' => $data['nama_kategori'] ?? null,
            'keterangan'    => $data['keterangan'] ?? null
        ]);

        $this->logAktivitas("Mengubah kategori ID {$id}");

        return $this->respondSuccess(null, 'Kategori berhasil diperbarui');
    }

    // ======================
    // HELPER LOG
    // ======================
    protected function logAktivitas($aktivitas)
    {
        /** @var object $this->request->user */

        $this->log->insert([
            'id_user' => $this->request->user->id_user,
            'aktivitas' => $aktivitas,
            'waktu' => date('Y-m-d H:i:s')
        ]);
    }
}