<?php

namespace Database\Seeders;

use App\Models\JabatanFungsional;
use App\Models\JenjangJabatan;
use App\Models\UnitKerja;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;

class JabatanFungsionalSeeder extends Seeder
{
    use WithoutModelEvents;

    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        foreach (JenjangJabatan::DEFAULTS as $jenjang) {
            JenjangJabatan::updateOrCreate(
                ['kode' => $jenjang['kode']],
                $jenjang
            );
        }

        // Delete Keterampilan jenjang records that may exist from previous seeds
        JenjangJabatan::where('kategori', 'Keterampilan')->get()->each(function ($jenjang) {
            // Reassign jabatan fungsional that used Keterampilan jenjang to Ahli Pertama
            $ahliPertama = JenjangJabatan::where('kode', 'ahli_pertama')->first();
            if ($ahliPertama) {
                JabatanFungsional::where('jenjang_jabatan_id', $jenjang->id)
                    ->update(['jenjang_jabatan_id' => $ahliPertama->id, 'kategori' => 'Keahlian']);
            }
            $jenjang->delete();
        });

        $jabatan = [
            ['nama_jabatan' => 'Analis Kebijakan', 'unit_kerja' => 'Sekretariat Daerah'],
            ['nama_jabatan' => 'Perancang Peraturan Perundang-undangan', 'unit_kerja' => 'Sekretariat Daerah'],
            ['nama_jabatan' => 'Pranata Hubungan Masyarakat', 'unit_kerja' => 'Sekretariat Daerah'],
            ['nama_jabatan' => 'Penerjemah', 'unit_kerja' => 'Sekretariat Daerah'],
            ['nama_jabatan' => 'Analis Kepegawaian', 'unit_kerja' => 'Badan Kepegawaian dan Pengembangan Sumber Daya Manusia'],
            ['nama_jabatan' => 'Assessor Sumber Daya Manusia Aparatur', 'unit_kerja' => 'Badan Kepegawaian dan Pengembangan Sumber Daya Manusia'],
            ['nama_jabatan' => 'Widyaiswara', 'unit_kerja' => 'Badan Kepegawaian dan Pengembangan Sumber Daya Manusia'],
            ['nama_jabatan' => 'Perencana', 'unit_kerja' => 'Badan Perencanaan Pembangunan Daerah'],
            ['nama_jabatan' => 'Statistisi', 'unit_kerja' => 'Badan Perencanaan Pembangunan Daerah'],
            ['nama_jabatan' => 'Analis Keuangan Pusat dan Daerah', 'unit_kerja' => 'Badan Pengelolaan Keuangan dan Aset Daerah'],
            ['nama_jabatan' => 'Penilai Pemerintah', 'unit_kerja' => 'Badan Pengelolaan Keuangan dan Aset Daerah'],
            ['nama_jabatan' => 'Auditor', 'unit_kerja' => 'Inspektorat Daerah'],
            ['nama_jabatan' => 'Pengawas Penyelenggaraan Urusan Pemerintahan Daerah', 'unit_kerja' => 'Inspektorat Daerah'],
            ['nama_jabatan' => 'Pranata Komputer', 'unit_kerja' => 'Dinas Komunikasi Informatika dan Persandian'],
            ['nama_jabatan' => 'Manggala Informatika', 'unit_kerja' => 'Dinas Komunikasi Informatika dan Persandian'],
            ['nama_jabatan' => 'Sandiman', 'unit_kerja' => 'Dinas Komunikasi Informatika dan Persandian'],
            ['nama_jabatan' => 'Guru', 'unit_kerja' => 'Dinas Pendidikan'],
            ['nama_jabatan' => 'Pengawas Sekolah', 'unit_kerja' => 'Dinas Pendidikan'],
            ['nama_jabatan' => 'Pamong Belajar', 'unit_kerja' => 'Dinas Pendidikan'],
            ['nama_jabatan' => 'Dokter', 'unit_kerja' => 'Dinas Kesehatan'],
            ['nama_jabatan' => 'Perawat', 'unit_kerja' => 'Dinas Kesehatan'],
            ['nama_jabatan' => 'Bidan', 'unit_kerja' => 'Dinas Kesehatan'],
            ['nama_jabatan' => 'Apoteker', 'unit_kerja' => 'Dinas Kesehatan'],
            ['nama_jabatan' => 'Penyuluh Kesehatan Masyarakat', 'unit_kerja' => 'Dinas Kesehatan'],
            ['nama_jabatan' => 'Teknik Jalan dan Jembatan', 'unit_kerja' => 'Dinas Pekerjaan Umum'],
            ['nama_jabatan' => 'Teknik Pengairan', 'unit_kerja' => 'Dinas Pekerjaan Umum'],
            ['nama_jabatan' => 'Penata Ruang', 'unit_kerja' => 'Dinas Pekerjaan Umum'],
            ['nama_jabatan' => 'Pekerja Sosial', 'unit_kerja' => 'Dinas Sosial'],
            ['nama_jabatan' => 'Penyuluh Sosial', 'unit_kerja' => 'Dinas Sosial'],
            ['nama_jabatan' => 'Penguji Kendaraan Bermotor', 'unit_kerja' => 'Dinas Perhubungan'],
            ['nama_jabatan' => 'Pengawas Keselamatan Pelayaran', 'unit_kerja' => 'Dinas Perhubungan'],
            ['nama_jabatan' => 'Penyuluh Pertanian', 'unit_kerja' => 'Dinas Pertanian'],
            ['nama_jabatan' => 'Pengawas Mutu Hasil Pertanian', 'unit_kerja' => 'Dinas Pertanian'],
            ['nama_jabatan' => 'Medik Veteriner', 'unit_kerja' => 'Dinas Peternakan'],
            ['nama_jabatan' => 'Pengawas Perikanan', 'unit_kerja' => 'Dinas Perikanan'],
            ['nama_jabatan' => 'Pengendali Dampak Lingkungan', 'unit_kerja' => 'Dinas Lingkungan Hidup'],
            ['nama_jabatan' => 'Penyuluh Kehutanan', 'unit_kerja' => 'Dinas Kehutanan'],
            ['nama_jabatan' => 'Arsiparis', 'unit_kerja' => 'Dinas Perpustakaan dan Kearsipan'],
            ['nama_jabatan' => 'Pustakawan', 'unit_kerja' => 'Dinas Perpustakaan dan Kearsipan'],
            ['nama_jabatan' => 'Adyatama Kepariwisataan dan Ekonomi Kreatif', 'unit_kerja' => 'Dinas Pariwisata'],
            ['nama_jabatan' => 'Analis Perdagangan', 'unit_kerja' => 'Dinas Perdagangan dan Perindustrian'],
            ['nama_jabatan' => 'Pengantar Kerja', 'unit_kerja' => 'Dinas Tenaga Kerja dan Transmigrasi'],
            ['nama_jabatan' => 'Analis Kependudukan dan Pencatatan Sipil', 'unit_kerja' => 'Dinas Kependudukan dan Pencatatan Sipil'],
            ['nama_jabatan' => 'Polisi Pamong Praja', 'unit_kerja' => 'Satuan Polisi Pamong Praja'],
        ];

        $jenjangKeahlian = ['ahli_pertama', 'ahli_muda', 'ahli_madya', 'ahli_utama'];

        foreach ($jabatan as $item) {
            $unitKerja = UnitKerja::firstOrCreate(['nama_unit' => $item['unit_kerja']]);

            foreach ($jenjangKeahlian as $jenjangKode) {
                $jenjangJabatan = JenjangJabatan::where('kode', $jenjangKode)->firstOrFail();

                JabatanFungsional::updateOrCreate(
                    [
                        'nama_jabatan' => $item['nama_jabatan'],
                        'jenjang_jabatan_id' => $jenjangJabatan->id,
                    ],
                    [
                        'kategori' => 'Keahlian',
                        'unit_kerja_id' => $unitKerja->id,
                    ]
                );
            }
        }

        // Clean up any jabatan that still have Keterampilan kategori
        JabatanFungsional::where('kategori', 'Keterampilan')->update(['kategori' => 'Keahlian']);
    }
}
