<?php

namespace Database\Seeders;

use App\Models\Kategori;
use App\Models\Satuan;
use App\Models\Supplier;
use App\Models\Obat;
use App\Models\ObatMasuk;
use App\Models\ObatKeluar;
use App\Models\User;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;
use Carbon\Carbon;

class DatabaseSeeder extends Seeder
{
    public function run(): void
    {
        // Create superadmin user
        $this->call([
            SuperAdminSeeder::class,
        ]);

        // Create admin user (apoteker)
        $user = User::create([
            'name' => 'Admin',
            'email' => 'admin@admin.com',
            'password' => Hash::make('password'),
            'role' => 'apoteker',
        ]);

        // Create dokter user
        User::create([
            'name' => 'Dokter',
            'email' => 'dokter@admin.com',
            'password' => Hash::make('password'),
            'role' => 'dokter',
        ]);

        // Create categories
        $kategoris = [
            ['nama' => 'Analgesik', 'keterangan' => 'Obat pereda nyeri'],
            ['nama' => 'Antibiotik', 'keterangan' => 'Obat anti bakteri'],
            ['nama' => 'Antipiretik', 'keterangan' => 'Obat penurun demam'],
            ['nama' => 'Antihipertensi', 'keterangan' => 'Obat tekanan darah tinggi'],
            ['nama' => 'Antidiabetik', 'keterangan' => 'Obat diabetes'],
            ['nama' => 'Vitamin dan Suplemen', 'keterangan' => 'Suplemen kesehatan'],
        ];

        foreach ($kategoris as $kategori) {
            Kategori::create($kategori);
        }

        // Create satuans (units)
        $satuans = [
            ['nama' => 'Tablet', 'keterangan' => 'Obat dalam bentuk tablet'],
            ['nama' => 'Kapsul', 'keterangan' => 'Obat dalam bentuk kapsul'],
            ['nama' => 'Botol', 'keterangan' => 'Obat cair dalam botol'],
            ['nama' => 'Strip', 'keterangan' => 'Obat dalam kemasan strip'],
            ['nama' => 'Box', 'keterangan' => 'Obat dalam kemasan box'],
            ['nama' => 'Ampul', 'keterangan' => 'Obat injeksi dalam ampul'],
            ['nama' => 'Tube', 'keterangan' => 'Obat salep/krim dalam tube'],
        ];

        foreach ($satuans as $satuan) {
            Satuan::create($satuan);
        }

        // Create suppliers
        $suppliers = [
            ['nama' => 'PT Kimia Farma', 'alamat' => 'Jakarta Pusat', 'telepon' => '021-1234567'],
            ['nama' => 'PT Kalbe Farma', 'alamat' => 'Jakarta Timur', 'telepon' => '021-7654321'],
            ['nama' => 'PT Sanbe Farma', 'alamat' => 'Bandung', 'telepon' => '022-1234567'],
        ];

        foreach ($suppliers as $supplier) {
            Supplier::create($supplier);
        }

        // Create medicines (legacy - keep for reference)
        $obats = [
            ['kategori_id' => 1, 'nama' => 'Paracetamol 500mg', 'kode' => 'OBT-001', 'satuan' => 'Tablet'],
            ['kategori_id' => 1, 'nama' => 'Ibuprofen 400mg', 'kode' => 'OBT-002', 'satuan' => 'Tablet'],
            ['kategori_id' => 2, 'nama' => 'Amoxicillin 500mg', 'kode' => 'OBT-003', 'satuan' => 'Kapsul'],
            ['kategori_id' => 2, 'nama' => 'Ciprofloxacin 500mg', 'kode' => 'OBT-004', 'satuan' => 'Tablet'],
            ['kategori_id' => 3, 'nama' => 'Aspirin 100mg', 'kode' => 'OBT-005', 'satuan' => 'Tablet'],
            ['kategori_id' => 4, 'nama' => 'Amlodipine 5mg', 'kode' => 'OBT-006', 'satuan' => 'Tablet'],
            ['kategori_id' => 4, 'nama' => 'Captopril 25mg', 'kode' => 'OBT-007', 'satuan' => 'Tablet'],
            ['kategori_id' => 5, 'nama' => 'Metformin 500mg', 'kode' => 'OBT-008', 'satuan' => 'Tablet'],
            ['kategori_id' => 6, 'nama' => 'Vitamin C 1000mg', 'kode' => 'OBT-009', 'satuan' => 'Tablet'],
            ['kategori_id' => 6, 'nama' => 'Vitamin D3 1000IU', 'kode' => 'OBT-010', 'satuan' => 'Kapsul'],
        ];

        foreach ($obats as $obat) {
            Obat::create($obat);
        }

        // Create incoming medicines with new structure
        $obatMasuks = [
            ['nama_obat' => 'Paracetamol 500mg', 'kategori_id' => 1, 'satuan_id' => 1, 'obat_id' => 1, 'supplier_id' => 1, 'user_id' => 1, 'kode_batch' => 'BCH-2024-001', 'stok' => 100, 'harga_beli' => 1500, 'harga_jual' => 2500, 'tanggal_penerimaan' => Carbon::now()->subDays(30), 'tanggal_kadaluarsa' => Carbon::now()->addMonths(6), 'no_faktur' => 'FKT-001'],
            ['nama_obat' => 'Ibuprofen 400mg', 'kategori_id' => 1, 'satuan_id' => 1, 'obat_id' => 2, 'supplier_id' => 1, 'user_id' => 1, 'kode_batch' => 'BCH-2024-002', 'stok' => 80, 'harga_beli' => 2000, 'harga_jual' => 3500, 'tanggal_penerimaan' => Carbon::now()->subDays(25), 'tanggal_kadaluarsa' => Carbon::now()->addDays(45), 'no_faktur' => 'FKT-002'],
            ['nama_obat' => 'Amoxicillin 500mg', 'kategori_id' => 2, 'satuan_id' => 2, 'obat_id' => 3, 'supplier_id' => 2, 'user_id' => 1, 'kode_batch' => 'BCH-2024-003', 'stok' => 150, 'harga_beli' => 3000, 'harga_jual' => 5000, 'tanggal_penerimaan' => Carbon::now()->subDays(20), 'tanggal_kadaluarsa' => Carbon::now()->addMonths(12), 'no_faktur' => 'FKT-003'],
            ['nama_obat' => 'Ciprofloxacin 500mg', 'kategori_id' => 2, 'satuan_id' => 1, 'obat_id' => 4, 'supplier_id' => 2, 'user_id' => 1, 'kode_batch' => 'BCH-2024-004', 'stok' => 60, 'harga_beli' => 4000, 'harga_jual' => 6500, 'tanggal_penerimaan' => Carbon::now()->subDays(15), 'tanggal_kadaluarsa' => Carbon::now()->addDays(20), 'no_faktur' => 'FKT-004'],
            ['nama_obat' => 'Aspirin 100mg', 'kategori_id' => 3, 'satuan_id' => 1, 'obat_id' => 5, 'supplier_id' => 3, 'user_id' => 1, 'kode_batch' => 'BCH-2024-005', 'stok' => 200, 'harga_beli' => 1000, 'harga_jual' => 1800, 'tanggal_penerimaan' => Carbon::now()->subDays(10), 'tanggal_kadaluarsa' => Carbon::now()->addDays(75), 'no_faktur' => 'FKT-005'],
            ['nama_obat' => 'Amlodipine 5mg', 'kategori_id' => 4, 'satuan_id' => 1, 'obat_id' => 6, 'supplier_id' => 1, 'user_id' => 1, 'kode_batch' => 'BCH-2024-006', 'stok' => 120, 'harga_beli' => 2500, 'harga_jual' => 4000, 'tanggal_penerimaan' => Carbon::now()->subDays(5), 'tanggal_kadaluarsa' => Carbon::now()->addMonths(8), 'no_faktur' => 'FKT-006'],
            ['nama_obat' => 'Captopril 25mg', 'kategori_id' => 4, 'satuan_id' => 1, 'obat_id' => 7, 'supplier_id' => 2, 'user_id' => 1, 'kode_batch' => 'BCH-2024-007', 'stok' => 90, 'harga_beli' => 1800, 'harga_jual' => 3000, 'tanggal_penerimaan' => Carbon::now()->subDays(3), 'tanggal_kadaluarsa' => Carbon::now()->addDays(15), 'no_faktur' => 'FKT-007'],
        ];

        foreach ($obatMasuks as $obatMasuk) {
            ObatMasuk::create($obatMasuk);
        }

        // Create outgoing medicines
        $obatKeluars = [
            ['obat_id' => 1, 'user_id' => 1, 'kode_batch' => 'BCH-2024-001', 'jumlah' => 20, 'tanggal_pengeluaran' => Carbon::now()->subDays(5), 'tanggal_kadaluarsa' => Carbon::now()->addMonths(6), 'no_pengeluaran' => 'OUT-001', 'nama_petugas' => 'Admin', 'nama_penerima' => 'Apotek Sehat', 'tujuan' => 'Distribusi', 'status' => 'terkirim'],
            ['obat_id' => 2, 'user_id' => 1, 'kode_batch' => 'BCH-2024-002', 'jumlah' => 15, 'tanggal_pengeluaran' => Carbon::now()->subDays(4), 'tanggal_kadaluarsa' => Carbon::now()->addDays(45), 'no_pengeluaran' => 'OUT-002', 'nama_petugas' => 'Admin', 'nama_penerima' => 'Puskesmas Maju', 'tujuan' => 'Distribusi', 'status' => 'terkirim'],
            ['obat_id' => 3, 'user_id' => 1, 'kode_batch' => 'BCH-2024-003', 'jumlah' => 30, 'tanggal_pengeluaran' => Carbon::now()->subDays(3), 'tanggal_kadaluarsa' => Carbon::now()->addMonths(12), 'no_pengeluaran' => 'OUT-003', 'nama_petugas' => 'Admin', 'nama_penerima' => 'RS Harapan', 'tujuan' => 'Distribusi', 'status' => 'proses'],
            ['obat_id' => 5, 'user_id' => 1, 'kode_batch' => 'BCH-2024-005', 'jumlah' => 50, 'tanggal_pengeluaran' => Carbon::now()->subDays(2), 'tanggal_kadaluarsa' => Carbon::now()->addDays(75), 'no_pengeluaran' => 'OUT-004', 'nama_petugas' => 'Admin', 'nama_penerima' => 'Klinik Pratama', 'tujuan' => 'Distribusi', 'status' => 'terkirim'],
        ];

        foreach ($obatKeluars as $obatKeluar) {
            ObatKeluar::create($obatKeluar);
        }
    }
}
