<?php

namespace App\Controllers\Api;

use App\Models\MutasiBarangModel;
use App\Models\BarangUnitModel;
use App\Models\RuanganModel;

class MutasiController extends BaseApiController
{
    protected $mutasi;
    protected $unit;
    protected $ruangan;

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

    // ==================================================
    // GET /api/mutasi  → LIST MUTASI UNIT
    // ==================================================
    public function index()
    {
        $data = $this->mutasi
            ->select('
                mutasi_barang.*,
                barang_unit.kode_unit,
                barang.nama_barang,
                r1.nama_ruangan AS dari_ruangan_nama,
                r2.nama_ruangan AS ke_ruangan_nama
            ')
            ->join('barang_unit', 'barang_unit.id_unit = mutasi_barang.id_unit')
            ->join('barang', 'barang.id_barang = barang_unit.id_barang')
            ->join('ruangan r1', 'r1.id_ruangan = mutasi_barang.dari_ruangan')
            ->join('ruangan r2', 'r2.id_ruangan = mutasi_barang.ke_ruangan')
            ->orderBy('mutasi_barang.tanggal', 'DESC')
            ->findAll();

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

    // ==================================================
    // POST /api/mutasi  → MUTASI UNIT (MULTI SELECT)
    // ==================================================
    public function store()
    {
        $data = $this->request->getJSON(true);

        // ---------------- VALIDASI INPUT ----------------
        if (empty($data['unit_ids']) || empty($data['ke_ruangan'])) {
            return $this->respondError('Data mutasi tidak lengkap', 422);
        }

        // Paksa tipe data
        $unitIds = array_map(
    fn ($v) => (int) $v,
    array_filter($data['unit_ids'], fn ($v) => is_numeric($v))
);

if (empty($unitIds)) {
    return $this->respondError('Unit tidak valid', 422);
}
        $keRuangan = (int) $data['ke_ruangan'];

        // ---------------- VALIDASI RUANGAN ----------------
        $ruanganTujuan = $this->ruangan->find($keRuangan);
        if (!$ruanganTujuan) {
            return $this->respondError('Ruangan tujuan tidak ditemukan', 404);
        }

        // ---------------- AMBIL DATA UNIT ----------------
        $units = $this->unit
            ->whereIn('id_unit', $unitIds)
            ->findAll();

        if (count($units) !== count($unitIds)) {
            return $this->respondError('Sebagian unit tidak ditemukan', 404);
        }
$unitNames = [];
        // ---------------- VALIDASI UNIT ----------------
        foreach ($units as $u) {
$unitNames[] = $u['kode_unit'];
            // Unit sudah dimusnahkan
            if ($u['status'] === 'Dimusnahkan') {
                return $this->respondError(
                    "Unit {$u['kode_unit']} sudah dimusnahkan",
                    400
                );
            }

            // Mutasi ke ruangan yang sama
            if ((int)$u['id_ruangan'] === $keRuangan) {
                return $this->respondError(
                    "Unit {$u['kode_unit']} sudah berada di ruangan tujuan",
                    400
                );
            }
        }

        // ---------------- TRANSAKSI DB ----------------
        $db = \Config\Database::connect();
        $db->transStart();

        foreach ($units as $u) {

            // Simpan riwayat mutasi
            $this->mutasi->insert([
                'id_unit'      => $u['id_unit'],
                'dari_ruangan' => $u['id_ruangan'],
                'ke_ruangan'   => $keRuangan,
                'tanggal'      => date('Y-m-d'),
                'keterangan'   => $data['keterangan'] ?? null,
            ]);

            // Update ruangan unit
            $this->unit->update($u['id_unit'], [
                'id_ruangan' => $keRuangan
            ]);
        }

        $db->transComplete();

        if ($db->transStatus() === false) {
            return $this->respondError('Gagal memproses mutasi', 500);
        }
/** @var object $this->request->user */
        // ---------------- LOG AKTIVITAS ----------------
      $jumlah = count($unitNames);
$daftarUnit = implode(', ', $unitNames);

$pesan = $jumlah === 1
    ? "Mutasi 1 unit ($daftarUnit) ke ruangan {$ruanganTujuan['nama_ruangan']}"
    : "Mutasi $jumlah unit ($daftarUnit) ke ruangan {$ruanganTujuan['nama_ruangan']}";

logAktivitas(
    $this->request->user->id_user,
    $pesan
);
        return $this->respondSuccess(
            null,
            count($units) . ' unit berhasil dimutasi'
        );
    }
}