<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;

class RegionSeeder extends Seeder
{
    public function run(): void
    {
        // 1. AUTO-CLEANUP: Hapus semua data wilayah lama agar tidak ganda
        Schema::disableForeignKeyConstraints();
        DB::table('districts')->truncate();
        DB::table('cities')->truncate();
        DB::table('provinces')->truncate();
        Schema::enableForeignKeyConstraints();

        // 2. Masukkan Provinsi
        $jatengId = DB::table('provinces')->insertGetId([
            'name' => 'Jawa Tengah',
            'created_at' => now(),
            'updated_at' => now()
        ]);
        
        // 3. Masukkan Data Seluruh 35 Kabupaten & Kota di Jawa Tengah beserta Kecamatannya
        $dataWilayah = [
            'Kab. Banjarnegara' => ['Banjarnegara', 'Bawang', 'Mandiraja', 'Purwanegara', 'Susukan', 'Klampok', 'Wanadadi', 'Sigaluh'],
            'Kab. Banyumas'     => ['Purwokerto Utara', 'Purwokerto Selatan', 'Purwokerto Timur', 'Purwokerto Barat', 'Ajibarang', 'Sokaraja', 'Baturraden', 'Sumbang', 'Banyumas', 'Cilongok'],
            'Kab. Batang'       => ['Batang', 'Bandar', 'Banyuputih', 'Gringsing', 'Subah', 'Tulis', 'Limpung', 'Gringsing'],
            'Kab. Blora'        => ['Blora', 'Cepu', 'Randublatung', 'Kunduran', 'Ngawen', 'Jati', 'Tunjungan', 'Jepon'],
            'Kab. Boyolali'     => ['Boyolali', 'Ampel', 'Banyudono', 'Ngemplak', 'Mojosongo', 'Teras', 'Cepogo', 'Simo'],
            'Kab. Brebes'       => ['Brebes', 'Wanasari', 'Bulakamba', 'Jatibarang', 'Bumiayu', 'Losari', 'Tanjung', 'Ketanggungan', 'Larangan', 'Tonjong'],
            'Kab. Cilacap'      => ['Cilacap Selatan', 'Cilacap Tengah', 'Cilacap Utara', 'Majenang', 'Kroya', 'Sidareja', 'Kesugihan', 'Jeruklegi', 'Adipala', 'Maos'],
            'Kab. Demak'        => ['Demak', 'Mranggen', 'Karangawen', 'Sayung', 'Bonang', 'Wedung', 'Gajah', 'Karangtengah'],
            'Kab. Grobogan'     => ['Purwodadi', 'Gubug', 'Godong', 'Toroh', 'Wirosari', 'Grobogan', 'Tegowanu', 'Penawangan'],
            'Kab. Jepara'       => ['Jepara', 'Tahunan', 'Pecangaan', 'Bangsri', 'Mayong', 'Welahan', 'Keling', 'Mlonggo'],
            'Kab. Karanganyar'  => ['Karanganyar', 'Colomadu', 'Jaten', 'Tasikmadu', 'Kebakkramat', 'Gondangrejo', 'Matesih', 'Karangpandan'],
            'Kab. Kebumen'      => ['Kebumen', 'Gombong', 'Karanganyar', 'Kutowinangun', 'Ayah', 'Prembun', 'Ambal', 'Pejagoan', 'Petanahan'],
            'Kab. Kendal'       => ['Kendal', 'Kaliwungu', 'Boja', 'Weleri', 'Sukorejo', 'Pegandon', 'Brangsong', 'Cepiring'],
            'Kab. Klaten'       => ['Klaten Utara', 'Klaten Tengah', 'Klaten Selatan', 'Prambanan', 'Delanggu', 'Pedan', 'Cawas', 'Jatinom', 'Tulung'],
            'Kab. Kudus'        => ['Kota Kudus', 'Jati', 'Bae', 'Dawe', 'Gebog', 'Kaliwungu', 'Mejobo', 'Undaan', 'Jekulo'],
            'Kab. Magelang'     => ['Mertoyudan', 'Muntilan', 'Secang', 'Borobudur', 'Salaman', 'Mungkid', 'Grabag', 'Bandongan'],
            'Kab. Pati'         => ['Pati', 'Margorejo', 'Juwana', 'Tayu', 'Kayen', 'Margoyoso', 'Wedarijaksa', 'Jakenan', 'Trangkil'],
            'Kab. Pekalongan'   => ['Kajen', 'Kedungwuni', 'Wiradesa', 'Bojong', 'Wonopringgo', 'Karanganyar', 'Buaran', 'Tirto', 'Sragi'],
            'Kab. Pemalang'     => ['Pemalang', 'Taman', 'Petarukan', 'Comal', 'Bantarbolang', 'Randudongkal', 'Moga', 'Belik', 'Ulujami', 'Pulosari'],
            'Kab. Purbalingga'  => ['Purbalingga', 'Bukateja', 'Bobotsari', 'Kaligondang', 'Padamara', 'Mrebet', 'Kemangkon', 'Kutasari'],
            'Kab. Purworejo'    => ['Purworejo', 'Kutoarjo', 'Bener', 'Loano', 'Purwodadi', 'Bayan', 'Kemiri', 'Grabag', 'Pituruh'],
            'Kab. Rembang'      => ['Rembang', 'Lasem', 'Kragan', 'Pamotan', 'Sulang', 'Kaliori', 'Sedan', 'Pancur'],
            'Kab. Semarang'     => ['Ungaran Barat', 'Ungaran Timur', 'Ambarawa', 'Bandungan', 'Bawen', 'Tengaran', 'Beringin', 'Pringapus', 'Tuntang'],
            'Kab. Sragen'       => ['Sragen', 'Gemolong', 'Masaran', 'Karangmalang', 'Gondang', 'Ngrampal', 'Plupuh', 'Kedawung'],
            'Kab. Sukoharjo'    => ['Sukoharjo', 'Grogol', 'Kartasura', 'Baki', 'Mojolaban', 'Polokarto', 'Weru', 'Bendosari'],
            'Kab. Tegal'        => ['Talang', 'Adiwerna', 'Slawi', 'Dukuhturi', 'Kramat', 'Pangkah', 'Lebaksiu', 'Suradadi', 'Tarub', 'Balapulang', 'Bumijawa', 'Bojong'],
            'Kab. Temanggung'   => ['Temanggung', 'Parakan', 'Kranggan', 'Ngadirejo', 'Kedu', 'Bulu', 'Candiroto', 'Tembarak'],
            'Kab. Wonogiri'     => ['Wonogiri', 'Selogiri', 'Pracimantoro', 'Baturetno', 'Jatisrono', 'Ngadirojo', 'Tirtomoyo', 'Giriwoyo'],
            'Kab. Wonosobo'     => ['Wonosobo', 'Kertek', 'Mojotengah', 'Selomerto', 'Garung', 'Leksono', 'Sapuran', 'Kalikajar'],
            
            // Area Pemerintahan Kota (Madya)
            'Kota Magelang'     => ['Magelang Utara', 'Magelang Tengah', 'Magelang Selatan'],
            'Kota Pekalongan'   => ['Pekalongan Barat', 'Pekalongan Timur', 'Pekalongan Selatan', 'Pekalongan Utara'],
            'Kota Salatiga'     => ['Argomulyo', 'Sidomukti', 'Sidorejo', 'Tingkir'],
            'Kota Semarang'     => ['Semarang Tengah', 'Semarang Utara', 'Semarang Selatan', 'Semarang Barat', 'Semarang Timur', 'Pedurungan', 'Banyumanik', 'Tembalang', 'Genuk', 'Mijen', 'Ngaliyan', 'Gayamsari', 'Gajahmungkur'],
            'Kota Surakarta'    => ['Banjarsari', 'Jebres', 'Laweyan', 'Pasar Kliwon', 'Serengan'],
            'Kota Tegal'        => ['Tegal Timur', 'Tegal Barat', 'Tegal Selatan', 'Margadana']
        ];

        foreach ($dataWilayah as $namaKota => $kecamatans) {
            // Simpan Kota/Kabupaten
            $cityId = DB::table('cities')->insertGetId([
                'province_id' => $jatengId,
                'name' => $namaKota,
                'created_at' => now(),
                'updated_at' => now()
            ]);

            // Array untuk insert bulk kecamatan agar performa seeder lebih cepat
            $districtsData = [];
            foreach ($kecamatans as $namaKec) {
                $districtsData[] = [
                    'city_id' => $cityId,
                    'name' => $namaKec,
                    'created_at' => now(),
                    'updated_at' => now()
                ];
            }
            
            // Eksekusi insert massal untuk kecamatan di kota tersebut
            DB::table('districts')->insert($districtsData);
        }
    }
}