﻿import codecs
content = '''<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\DB;
use App\Models\Province;
use App\Models\Regency;
use App\Models\District;
use App\Models\Village;

class WilayahSeeder extends Seeder
{
    public function run(): void
    {
        $this->command->info("Memulai download data wilayah...");

        DB::statement("SET FOREIGN_KEY_CHECKS=0");
        Village::truncate();
        District::truncate();
        Regency::truncate();
        Province::truncate();
        DB::statement("SET FOREIGN_KEY_CHECKS=1");

        $base = "https://raw.githubusercontent.com/cahyadsn/wilayah/master/db";

        $this->command->info("Downloading provinsi...");
        $provinces = Http::timeout(60)->get("{$base}/provinsi.json")->json();
        foreach (array_chunk($provinces, 100) as $chunk) {
            Province::insert(array_map(fn($p) => ["id" => $p["kode"], "name" => $p["nama"]], $chunk));
        }
        $this->command->info("Provinsi selesai: " . count($provinces));

        $this->command->info("Downloading kabupaten/kota...");
        $regencies = Http::timeout(60)->get("{$base}/kabupaten_kota.json")->json();
        foreach (array_chunk($regencies, 200) as $chunk) {
            Regency::insertOrIgnore(array_map(fn($r) => [
                "id" => $r["kode"], "province_id" => substr($r["kode"], 0, 2), "name" => $r["nama"]
            ], $chunk));
        }
        $this->command->info("Kabupaten/kota selesai: " . count($regencies));

        $this->command->info("Downloading kecamatan...");
        $districts = Http::timeout(60)->get("{$base}/kecamatan.json")->json();
        foreach (array_chunk($districts, 300) as $chunk) {
            District::insertOrIgnore(array_map(fn($d) => [
                "id" => $d["kode"], "regency_id" => substr($d["kode"], 0, 4), "name" => $d["nama"]
            ], $chunk));
        }
        $this->command->info("Kecamatan selesai: " . count($districts));

        $this->command->info("Downloading kelurahan/desa...");
        $villages = Http::timeout(120)->get("{$base}/desa_kelurahan.json")->json();
        foreach (array_chunk($villages, 500) as $chunk) {
            DB::table("villages")->insertOrIgnore(array_map(fn($v) => [
                "id" => $v["kode"], "district_id" => substr($v["kode"], 0, 6), "name" => $v["nama"]
            ], $chunk));
        }
        $this->command->info("Kelurahan selesai: " . count($villages));

        $this->command->info("Semua data wilayah berhasil didownload!");
    }
}
'''
with open("database/seeders/WilayahSeeder.php", "w", encoding="utf-8") as f:
    f.write(content)
print("Berhasil!")
