<?php

namespace App\Database\Seeds;

use CodeIgniter\Database\Seeder;

class BarangSeeder extends Seeder
{
    public function run()
    {
        $kategoriMap = $this->kategoriMap();

        $barang = [
            [
                'kode_barang'      => 'INV-LTP-001',
                'nama_barang'      => 'Laptop Lenovo ThinkPad E14',
                'kategori'         => 'Komputer dan Laptop',
                'satuan'           => 'unit',
                'lokasi_barang'    => 'Ruang IT',
                'stok_awal'        => 6,
                'stok_minimum'     => 2,
                'deskripsi_barang' => 'Laptop operasional untuk staf administrasi dan keuangan.',
            ],
            [
                'kode_barang'      => 'INV-PRN-001',
                'nama_barang'      => 'Printer Epson L3250',
                'kategori'         => 'Elektronik Kantor',
                'satuan'           => 'unit',
                'lokasi_barang'    => 'Ruang Administrasi',
                'stok_awal'        => 3,
                'stok_minimum'     => 1,
                'deskripsi_barang' => 'Printer multifungsi untuk cetak dan scan dokumen kantor.',
            ],
            [
                'kode_barang'      => 'INV-RTR-001',
                'nama_barang'      => 'Router MikroTik hEX RB750Gr3',
                'kategori'         => 'Perangkat Jaringan',
                'satuan'           => 'unit',
                'lokasi_barang'    => 'Rak Server',
                'stok_awal'        => 4,
                'stok_minimum'     => 1,
                'deskripsi_barang' => 'Router jaringan untuk pembagian koneksi internal kantor.',
            ],
            [
                'kode_barang'      => 'INV-ATK-001',
                'nama_barang'      => 'Kertas HVS A4 80gsm',
                'kategori'         => 'Alat Tulis Kantor',
                'satuan'           => 'rim',
                'lokasi_barang'    => 'Lemari ATK A, Baris 1',
                'stok_awal'        => 25,
                'stok_minimum'     => 8,
                'deskripsi_barang' => 'Kertas HVS untuk kebutuhan cetak dokumen harian.',
            ],
            [
                'kode_barang'      => 'INV-ATK-002',
                'nama_barang'      => 'Pulpen Standard AE7 Hitam',
                'kategori'         => 'Alat Tulis Kantor',
                'satuan'           => 'box',
                'lokasi_barang'    => 'Lemari ATK A, Baris 2',
                'stok_awal'        => 12,
                'stok_minimum'     => 4,
                'deskripsi_barang' => 'Pulpen tinta hitam untuk kebutuhan administrasi.',
            ],
            [
                'kode_barang'      => 'INV-FUR-001',
                'nama_barang'      => 'Kursi Kerja Hidrolik',
                'kategori'         => 'Furniture Kantor',
                'satuan'           => 'unit',
                'lokasi_barang'    => 'Gudang Furniture',
                'stok_awal'        => 10,
                'stok_minimum'     => 2,
                'deskripsi_barang' => 'Kursi kerja dengan sandaran dan pengatur tinggi.',
            ],
            [
                'kode_barang'      => 'INV-ELK-001',
                'nama_barang'      => 'Proyektor Epson EB-E01',
                'kategori'         => 'Elektronik Kantor',
                'satuan'           => 'unit',
                'lokasi_barang'    => 'Ruang Meeting',
                'stok_awal'        => 2,
                'stok_minimum'     => 1,
                'deskripsi_barang' => 'Proyektor untuk presentasi dan rapat internal.',
            ],
            [
                'kode_barang'      => 'INV-LST-001',
                'nama_barang'      => 'Kabel Roll 10 Meter',
                'kategori'         => 'Peralatan Listrik',
                'satuan'           => 'unit',
                'lokasi_barang'    => 'Lemari B, Baris 3',
                'stok_awal'        => 8,
                'stok_minimum'     => 2,
                'deskripsi_barang' => 'Kabel roll untuk kebutuhan listrik sementara di area kerja.',
            ],
            [
                'kode_barang'      => 'INV-KBR-001',
                'nama_barang'      => 'Cairan Pembersih Lantai 5 Liter',
                'kategori'         => 'Peralatan Kebersihan',
                'satuan'           => 'jerigen',
                'lokasi_barang'    => 'Gudang Kebersihan',
                'stok_awal'        => 15,
                'stok_minimum'     => 5,
                'deskripsi_barang' => 'Cairan pembersih lantai untuk operasional kebersihan gedung.',
            ],
            [
                'kode_barang'      => 'INV-SPR-001',
                'nama_barang'      => 'Baterai UPS 12V 7Ah',
                'kategori'         => 'Suku Cadang',
                'satuan'           => 'unit',
                'lokasi_barang'    => 'Rak Sparepart IT',
                'stok_awal'        => 10,
                'stok_minimum'     => 3,
                'deskripsi_barang' => 'Baterai pengganti untuk perangkat UPS kantor dan ruang server.',
            ],
        ];

        foreach ($barang as $item) {
            $kategoriId = $kategoriMap[$item['kategori']] ?? null;

            if ($kategoriId === null || $this->exists($item['kode_barang'])) {
                continue;
            }

            $this->db->table('barang')->insert([
                'kode_barang'      => $item['kode_barang'],
                'nama_barang'      => $item['nama_barang'],
                'deskripsi_barang' => $item['deskripsi_barang'],
                'kategori_id'      => $kategoriId,
                'satuan'           => $item['satuan'],
                'lokasi_barang'    => $item['lokasi_barang'],
                'stok_minimum'     => $item['stok_minimum'],
                'stok_awal'        => $item['stok_awal'],
                'stok'             => $item['stok_awal'],
                'foto'             => null,
                'qrcode'           => $item['kode_barang'],
                'barcode'          => $item['kode_barang'],
                'created_at'       => date('Y-m-d H:i:s'),
                'updated_at'       => date('Y-m-d H:i:s'),
            ]);
        }
    }

    private function kategoriMap(): array
    {
        $rows = $this->db->table('kategori')
            ->select('id, nama_kategori')
            ->get()
            ->getResultArray();

        $map = [];

        foreach ($rows as $row) {
            $map[$row['nama_kategori']] = (int) $row['id'];
        }

        return $map;
    }

    private function exists(string $kodeBarang): bool
    {
        return $this->db->table('barang')
            ->where('kode_barang', $kodeBarang)
            ->countAllResults() > 0;
    }
}
