<?php

namespace App\Controllers\Api;

use App\Models\BarangUnitModel;
use App\Models\BarangModel;
use App\Models\RuanganModel;

class BarangUnitController extends BaseApiController
{
    protected $unit;
    protected $barang;
    protected $ruangan;

    public function __construct()
    {
        $this->unit    = new BarangUnitModel();
        $this->barang  = new BarangModel();
        $this->ruangan = new RuanganModel();
    }

    // ======================
    // GET /api/barang-unit
    // ======================
   public function index()
{
    $filters = [
        'tahun_perolehan' => $this->request->getGet('tahun_perolehan'),
        'sumber_dana'     => $this->request->getGet('sumber_dana'),
    ];

    $data = $this->unit->getWithRelation($filters);

    return $this->respondSuccess($data, 'Data barang unit');
}

    // ======================
    // POST /api/barang-unit
    // Generate unit (bulk)
    // ======================
    public function store()
    {
        $data = $this->request->getJSON(true);

        if (
            empty($data['id_barang']) ||
            empty($data['id_ruangan']) ||
            empty($data['jumlah'])
        ) {
            return $this->respondError('Data unit tidak lengkap', 422);
        }

        $barang = $this->barang->find($data['id_barang']);
        if (!$barang) {
            return $this->respondError('Barang induk tidak ditemukan', 404);
        }

        $ruangan = $this->ruangan->find($data['id_ruangan']);
        if (!$ruangan) {
            return $this->respondError('Ruangan tidak ditemukan', 404);
        }

        $jumlah = (int) $data['jumlah'];
        if ($jumlah <= 0) {
            return $this->respondError('Jumlah unit harus lebih dari 0', 422);
        }

        // Cari nomor terakhir unit
        $lastUnit = $this->unit
            ->like('kode_unit', $barang['kode_barang'] . '-', 'after')
            ->orderBy('id_unit', 'DESC')
            ->first();

        $start = 1;
        if ($lastUnit) {
            $parts = explode('-', $lastUnit['kode_unit']);
            $start = ((int) end($parts)) + 1;
        }

        // Generate unit
        for ($i = 0; $i < $jumlah; $i++) {
            $no = str_pad($start + $i, 3, '0', STR_PAD_LEFT);

            $kodeUnit = $barang['kode_barang'] . '-' . $no;

            $this->unit->insert([
                'id_barang' => $barang['id_barang'],
                'kode_unit' => $kodeUnit,
                'barcode'   => $kodeUnit,   // 🔑 INI KUNCINYA
                'id_ruangan'=> $data['id_ruangan'],
                'kondisi'   => 'Baik',
                'status'    => 'Aktif'
            ]);
        }

        /** @var object $this->request->user */
        logAktivitas(
            $this->request->user->id_user,
            "Generate {$jumlah} unit untuk barang: {$barang['nama_barang']}"
        );

        return $this->respondSuccess(
            null,
            "{$jumlah} unit berhasil dibuat"
        );
    }

    // ======================
    // PUT /api/barang-unit/{id}
    // Update kondisi / ruangan
    // ======================
    public function update($id)
{
    $data = $this->request->getJSON(true);

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

    $update = [];

    // ===== FIELD LAMA =====
    if (isset($data['kondisi'])) {
        $update['kondisi'] = $data['kondisi'];
    }

    if (isset($data['id_ruangan'])) {
        $update['id_ruangan'] = $data['id_ruangan'];
    }

    // ===== FIELD BARU =====
    if (array_key_exists('sumber_dana', $data)) {
        $update['sumber_dana'] = $data['sumber_dana'];
    }

    if (array_key_exists('tahun_perolehan', $data)) {
        $update['tahun_perolehan'] = $data['tahun_perolehan'];
    }

    if (empty($update)) {
        return $this->respondError('Tidak ada data yang diubah', 422);
    }

    $this->unit->update($id, $update);

    /** @var object $this->request->user */
    logAktivitas(
        $this->request->user->id_user,
        "Update data unit {$unit['kode_unit']}"
    );

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

}