<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use App\Models\Aduan;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\DB;

class AduanSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        // 1. Kosongkan data aduan lama
        DB::statement('SET FOREIGN_KEY_CHECKS=0;');
        Aduan::truncate();
        DB::statement('SET FOREIGN_KEY_CHECKS=1;');

        // 2. Daftar 21 Desa di Kecamatan Wonosalam, Demak
        $desaList = [
            'botorejo', 'bunderan', 'doreng', 'getas', 'jogoloyo',
            'kalianyar', 'karangrejo', 'karangrowo', 'kendaldoyong', 'kerangkulon',
            'kuncir', 'lempuyang', 'mojodemak', 'mranak', 'mrisen',
            'pilangrejo', 'sidomulyo', 'tlogodowo', 'tlogorejo', 'trengguli',
            'wonosalam'
        ];

        // 20 Desa selain Kendaldoyong
        $otherDesaList = array_values(array_filter($desaList, fn($d) => $d !== 'kendaldoyong'));

        // 3. Template Aduan per Kategori
        $templates = [
            'infrastruktur_fasilitas' => [
                'Jalan raya di Desa {desa} tepatnya dekat pertigaan RT {rt}/RW {rw} rusak parah dengan lubang yang cukup dalam. Hal ini membahayakan warga yang lewat.',
                'Mohon segera diperbaiki jembatan kecil penghubung antardusun di Desa {desa} RT {rt} yang jalannya mulai ambrol dan membahayakan keselamatan warga.',
                'Jalan utama Desa {desa} di RT {rt} banyak berlubang dan becek saat hujan. Warga kesulitan untuk lewat membawa hasil panen.',
                'Pagar pembatas jembatan di RT {rt} RW {rw} Desa {desa} runtuh terkena arus sungai kemarin malam. Mohon dinas terkait segera meninjau lokasi.',
                'Akses jalan menuju area pemakaman umum di Desa {desa} RT {rt} RW {rw} sangat rusak dan berlumpur. Warga kesulitan saat ada pemakaman.',
                'Tembok penahan tanah di pinggir jalan Desa {desa} RT {rt} RW {rw} longsor setelah diguyur hujan lebat. Jika dibiarkan jalan bisa ikut terputus.',
                'Jalan masuk ke Desa {desa} RT {rt} RW {rw} rusak berat akibat sering dilewati truk pengangkut tanah. Warga mengeluhkan debu yang tebal.',
                'Saluran drainase di jalan utama Desa {desa} RT {rt} pecah dan rusak, menyebabkan air meluap ke jalan saat hujan deras.',
                'Jembatan bambu darurat di Desa {desa} RT {rt} RW {rw} kondisinya sudah rapuh dan bergoyang saat dilewati anak-anak sekolah. Butuh perbaikan permanen.',
                'Kerusakan aspal jalan di dekat balai desa {desa} RT {rt} semakin parah dan banyak kerikil berserakan yang sering membuat pengendara terpeleset.',
            ],
            'kebersihan_lingkungan' => [
                'Tumpukan sampah plastik dan limbah rumah tangga menumpuk di saluran air RT {rt}/RW {rw} Desa {desa}, menimbulkan bau tidak sedap dan menyumbat air.',
                'Ada warga yang membuang sampah sembarangan di lahan kosong dekat pemukiman RT {rt} Desa {desa}, mohon dipasang plang larangan membuang sampah.',
                'Saluran irigasi sawah di Desa {desa} RT {rt} RW {rw} dipenuhi sampah plastik sehingga aliran air ke sawah terhambat.',
                'Sampah liar menumpuk di pinggir jalan raya utama Desa {desa} RT {rt} RW {rw}. Baunya sangat mengganggu pengguna jalan yang lewat.',
                'Sungai kecil di Desa {desa} RT {rt} mulai tercemar karena banyak warga luar desa yang membuang kantong sampah ke jembatan pada malam hari.',
                'Genangan air keruh di parit RT {rt} Desa {desa} menyumbat karena sampah menyumbat gorong-gorong, menjadi sarang nyamuk DBD yang mengkhawatirkan.',
                'Tumpukan jerami dan sampah basah dibiarkan membusuk di pinggir jalan Desa {desa} RT {rt} RW {rw}, mengganggu pemandangan desa kami.',
                'Saluran drainase air limbah rumah tangga di RT {rt} Desa {desa} mampet total akibat endapan lumpur dan sampah plastik yang tebal.',
                'Tempat pembuangan sampah sementara di RT {rt} Desa {desa} sudah meluber hingga ke jalan desa dan belum diangkut petugas selama seminggu.',
                'Banyak sampah menyumbat pintu air irigasi di Desa {desa} RT {rt} RW {rw}, menyebabkan air meluap ke area persawahan warga sekitar.',
            ],
            'layanan_publik_utilitas' => [
                'Lampu jalan penerangan utama di Desa {desa} RT {rt} RW {rw} mati total selama seminggu ini. Jalanan sangat gelap saat malam hari.',
                'Aliran air bersih dari PDAM/Pamsimas di Desa {desa} RT {rt} macet dan sering mati, padahal warga sangat membutuhkan air bersih untuk memasak.',
                'Listrik sering padam secara mendadak di Desa {desa} RT {rt} tanpa adanya pemberitahuan terlebih dahulu dari pihak PLN.',
                'Kabel listrik yang melintang di jalan desa RT {rt} RW {rw} Desa {desa} menggelantung sangat rendah dan membahayakan kendaraan tinggi yang lewat.',
                'Tiang lampu jalan di dekat persimpangan RT {rt} Desa {desa} posisinya miring setelah tertabrak kendaraan dan khawatir akan roboh.',
                'Air Pamsimas di RT {rt} Desa {desa} keluar dalam kondisi keruh dan berbau tanah selama tiga hari terakhir. Tidak layak digunakan.',
                'Minimnya tiang listrik di daerah pinggiran Desa {desa} RT {rt} membuat warga terpaksa menarik kabel sendiri dari jarak yang jauh.',
                'Lampu PJU di dekat pos ronda RT {rt} Desa {desa} berkedip-kedip rusak dan akhirnya mati total, membuat area tersebut sangat gelap malam hari.',
                'Distribusi air bersih di wilayah RT {rt} Desa {desa} tersumbat, aliran airnya sangat kecil bahkan sering mati total sejak seminggu lalu.',
                'Kabel internet dan listrik yang semrawut di RT {rt} Desa {desa} mulai menjuntai ke jalan dan mengganggu keselamatan warga.',
            ],
            'pelayanan_administrasi' => [
                'Proses pembuatan kartu keluarga (KK) di Kantor Balai Desa {desa} sangat lambat. Saya sudah mengurus sejak satu bulan lalu dan belum selesai.',
                'Petugas administrasi di Balai Desa {desa} sering terlambat datang. Pelayanan yang seharusnya buka jam 8 pagi baru dimulai jam 9 lewat.',
                'Saya ingin mengeluhkan sikap petugas pelayanan KTP di Desa {desa} yang kurang ramah dan tidak informatif dalam melayani warga RT {rt}.',
                'Antrean untuk verifikasi berkas di Kantor Desa {desa} sangat panjang dan tidak teratur. Mohon diperbaiki sistem nomor antreannya.',
                'Saat jam kerja, petugas pelayanan di Balai Desa {desa} banyak yang tidak ada di ruangan, sehingga pelayanan warga RT {rt} menjadi terbengkalai.',
                'Pembuatan surat pengantar nikah di Balai Desa {desa} dipersulit dengan alasan berkas yang kurang jelas, padahal semua dokumen sudah lengkap.',
                'Informasi alur persyaratan administrasi di Balai Desa {desa} kurang transparan. Warga sering kebingungan karena persyaratannya berubah-ubah.',
                'Petugas di Balai Desa {desa} kurang sigap dalam melayani pengurusan surat keterangan tidak mampu (SKTM) untuk warga miskin RT {rt}.',
                'Sistem komputer untuk pencetakan dokumen di Kantor Desa {desa} sering mengalami gangguan koneksi internet, membuat pelayanan tertunda lama.',
                'Pengurusan surat mutasi penduduk di Balai Desa {desa} memakan waktu yang sangat lama tanpa alasan yang jelas dari pihak desa.',
            ],
            'keamanan_ketertiban' => [
                'Sering terjadi aksi balapan liar oleh remaja pada malam minggu di sepanjang jalan desa {desa} RT {rt}, suara knalpotnya sangat bising.',
                'Banyak pemuda berkumpul dan minum-minuman keras di dekat pos ronda RT {rt} Desa {desa} hingga larut malam, meresahkan warga sekitar.',
                'Tindakan pencurian tabung gas dan hewan ternak mulai marak terjadi di lingkungan RT {rt} RW {rw} Desa {desa}. Mohon ronda malam diaktifkan lagi.',
                'Kendaraan roda empat yang diparkir sembarangan di gang sempit RT {rt} Desa {desa} menutup jalan masuk ambulan atau mobil pemadam.',
                'Suara musik yang sangat keras dari acara pesta salah satu warga RT {rt} Desa {desa} melewati tengah malam tanpa izin lingkungan.',
                'Sering terjadi keributan antar pemuda di perbatasan Desa {desa} RT {rt} terutama saat malam hari. Mohon patroli keamanan ditingkatkan.',
                'Ada aktivitas mencurigakan dari sekelompok orang asing yang menginap di rumah kontrakan RT {rt} Desa {desa} tanpa melapor ke Ketua RT.',
                'Pengendara motor sering mengebut di gang pemukiman warga Desa {desa} RT {rt} RW {rw}, sangat membahayakan anak-anak kecil yang bermain.',
                'Lemahnya penerangan di area pemakaman RT {rt} Desa {desa} sering dimanfaatkan oleh remaja untuk berbuat hal negatif di malam hari.',
                'Banyak anjing liar berkeliaran di jalan desa RT {rt} Desa {desa} yang galak dan sering mengejar anak-anak yang pulang mengaji.',
            ],
            'sosial_kesejahteraan' => [
                'Pembagian bantuan sosial sembako di Desa {desa} RT {rt} RW {rw} banyak yang tidak tepat sasaran. Warga yang punya mobil malah dapat bantuan.',
                'Data penerima program PKH di RT {rt} Desa {desa} tidak pernah diperbarui, akibatnya beberapa warga miskin yang berhak tidak pernah dapat.',
                'Petugas penyalur bantuan langsung tunai (BLT) di Desa {desa} dinilai kurang adil dan hanya mengutamakan kerabat terdekatnya saja.',
                'Beberapa janda lansia di RT {rt} RW {rw} Desa {desa} hidup memprihatinkan namun tidak terdaftar dalam penerima kartu bantuan sosial apa pun.',
                'Ada potongan dana bantuan sosial oleh oknum RT di Desa {desa} dengan alasan untuk biaya administrasi. Mohon diselidiki.',
                'Proses pendaftaran DTKS untuk warga miskin di Desa {desa} RT {rt} dipersulit oleh petugas desa dengan alasan kuota sudah penuh.',
                'Penyaluran bantuan beras bersubsidi di RT {rt} Desa {desa} kualitasnya buruk, berasnya berbau apek dan warnanya kekuningan.',
                'Warga miskin yang mengalami sakit parah di RT {rt} Desa {desa} kesulitan mendapatkan rujukan BPJS gratis dari puskesmas setempat.',
                'Bantuan alat pertanian untuk kelompok tani di Desa {desa} dimonopoli oleh pengurus saja, anggota RT {rt} tidak pernah kebagian pinjam.',
                'Sosialisasi program bantuan renovasi rumah tidak layak huni (RTLH) di Desa {desa} RT {rt} kurang terbuka dan terkesan ditutup-tutupi.',
            ],
        ];

        // 4. Tanggapan Resmi Perangkat Kecamatan / Desa
        $responses = [
            'infrastruktur_fasilitas' => [
                'selesai' => 'Terima kasih atas laporannya. Pihak Seksi Pembangunan Kecamatan Wonosalam telah meninjau lokasi dan berkoordinasi dengan DPU Demak. Perbaikan atau penambalan aspal darurat telah diselesaikan di Desa {desa_name}. Semoga memperlancar aktivitas transportasi warga.',
                'diproses' => 'Laporan mengenai jalan rusak sudah kami terima. Seksi Pembangunan Kecamatan Wonosalam telah meneruskan usulan anggaran perbaikan jalan ini ke Musrenbang Kabupaten Demak agar diprioritaskan tahun anggaran ini.',
            ],
            'kebersihan_lingkungan' => [
                'selesai' => 'Terima kasih atas kepedulian Anda terhadap lingkungan. Pemerintah Desa {desa_name} bersama warga setempat telah melakukan gotong royong pembersihan sampah yang menyumbat parit. Papan larangan membuang sampah liar juga sudah dipasang.',
                'diproses' => 'Laporan telah kami verifikasi. Pihak kecamatan sedang menjadwalkan mobil pengangkut sampah dari Dinas Lingkungan Hidup Kabupaten Demak untuk mengangkut tumpukan sampah tersebut.',
            ],
            'layanan_public_utilitas' => [
                'selesai' => 'Laporan perbaikan lampu jalan mati telah ditindaklanjuti. Petugas teknis Pamsimas/PLN didampingi perangkat Desa {desa_name} telah mengganti bohlam lampu yang padam. Penerangan jalan kini sudah kembali normal.',
                'diproses' => 'Terima kasih atas laporannya. Pengaduan padamnya utilitas ini telah diteruskan ke Dinas Perhubungan Kabupaten Demak untuk dilakukan penggantian instalasi kabel/bola lampu yang rusak.',
            ],
            'pelayanan_administrasi' => [
                'selesai' => 'Terima kasih atas masukannya. Pihak Kecamatan Wonosalam telah melakukan pembinaan dan menegur langsung perangkat desa yang bersangkutan. Pelayanan administrasi di Balai Desa {desa_name} kini berjalan sesuai jam operasional standar dan akan terus dievaluasi.',
                'diproses' => 'Laporan Anda sedang dalam proses klarifikasi. Pihak kecamatan sedang melakukan koordinasi dengan Kepala Desa {desa_name} terkait disiplin jam kerja perangkat desa dalam pelayanan masyarakat.',
            ],
            'keamanan_ketertiban' => [
                'selesai' => 'Terima kasih atas informasinya. Bhabinkamtibmas dan jajaran Kepolisian Sektor Wonosalam telah berpatroli serta menertibkan kegiatan yang meresahkan tersebut. Warga juga diimbau untuk mengaktifkan kembali siskamling malam hari.',
                'diproses' => 'Aduan telah diteruskan kepada Satpol PP Kecamatan Wonosalam dan Bhabinkamtibmas setempat untuk dijadwalkan pemantauan intensif dan patroli keliling di area tersebut.',
            ],
            'sosial_kesejahteraan' => [
                'selesai' => 'Terima kasih atas laporannya. Pihak dinas sosial bersama perangkat Desa {desa_name} telah melakukan peninjauan dan pemutakhiran data warga penerima bantuan (DTKS). Penerima bantuan yang dinilai sudah mampu telah dicoret dan dialihkan kepada warga miskin yang layak.',
                'diproses' => 'Laporan sudah diterima dan sedang diproses verifikasi data lapangan oleh petugas Tenaga Kesejahteraan Sosial Kecamatan (TKSK) Wonosalam bersama operator desa.',
            ],
        ];

        // Generator Nama Javanese/Islamic
        $firstNames = ['Joko', 'Bambang', 'Budi', 'Slamet', 'Sugeng', 'Sutrisno', 'Edi', 'Agus', 'Heri', 'Supardi', 'Hendro', 'Sutopo', 'Hardi', 'Widodo', 'Mulyono', 'Wibowo', 'Suprianto', 'Hartono', 'Sunardi', 'Siswanto', 'Eko', 'Prasetyo', 'Kurniawan', 'Wahyu', 'Rudi', 'Anwar', 'Solikin', 'Hasan', 'Ali', 'Ahmad', 'Muhammad', 'Sholeh', 'Mustofa', 'Siti', 'Sri', 'Indah', 'Purwati', 'Winarni', 'Endang', 'Wahyuni', 'Rahayu', 'Lestari', 'Kartini', 'Sumarni', 'Sulastri', 'Utami', 'Dewi', 'Astuti', 'Fitriani', 'Nurhayati', 'Aminah', 'Fatimah', 'Zainab', 'Hasanah', 'Lilik', 'Rina', 'Rini', 'Hayati'];
        $lastNames = ['Wibowo', 'Prasetyo', 'Kurniawan', 'Susilo', 'Hidayat', 'Saputra', 'Santoso', 'Nugroho', 'Setiawan', 'Wijaya', 'Haryanto', 'Purnama', 'Suryadi', 'Utomo', 'Subagyo', 'Sudrajat', 'Mulyadi', 'Budiman', 'Hidayatullah', 'Saputro', 'Lestari', 'Rahayu', 'Astuti', 'Wahyuni', 'Dewi', 'Indriani'];

        $generateName = function() use ($firstNames, $lastNames) {
            $name = $firstNames[array_rand($firstNames)];
            if (rand(0, 10) > 4) {
                $name .= ' ' . $lastNames[array_rand($lastNames)];
            }
            return $name;
        };

        // Generator NIK Demak
        $generateNik = function() {
            $province = '33'; // Jawa Tengah
            $regency = '21';  // Demak
            $district = '08'; // Wonosalam
            $day = str_pad(rand(1, 31), 2, '0', STR_PAD_LEFT);
            if (rand(0, 1) === 1) {
                $day = (int)$day + 40; // Kode tanggal lahir wanita (+40)
            }
            $month = str_pad(rand(1, 12), 2, '0', STR_PAD_LEFT);
            $year = str_pad(rand(65, 99), 2, '0', STR_PAD_LEFT);
            $birthDate = $day . $month . $year;
            $sequence = str_pad(rand(1, 999), 4, '0', STR_PAD_LEFT);
            return $province . $regency . $district . $birthDate . $sequence;
        };

        // Nama-nama desa versi tampilan formal
        $desaFormal = [
            'botorejo'    => 'Botorejo',
            'bunderan'    => 'Bunderan',
            'doreng'      => 'Doreng',
            'getas'       => 'Getas',
            'jogoloyo'    => 'Jogoloyo',
            'kalianyar'   => 'Kalianyar',
            'karangrejo'  => 'Karangrejo',
            'karangrowo'  => 'Karangrowo',
            'kendaldoyong'=> 'Kendaldoyong',
            'kerangkulon' => 'Kerangkulon',
            'kuncir'      => 'Kuncir',
            'lempuyang'   => 'Lempuyang',
            'mojodemak'   => 'Mojodemak',
            'mranak'      => 'Mranak',
            'mrisen'      => 'Mrisen',
            'pilangrejo'  => 'Pilangrejo',
            'sidomulyo'   => 'Sido Mulyo',
            'tlogodowo'   => 'Tlogodowo',
            'tlogorejo'   => 'Tlogorejo',
            'trengguli'   => 'Trengguli',
            'wonosalam'   => 'Wonosalam',
        ];

        // 5. Buat 100 Aduan (70% Kendaldoyong = 70 data, 30% Desa Lain = 30 data)
        $totalData = 100;
        $kendaldoyongTarget = 70;

        for ($i = 1; $i <= $totalData; $i++) {
            // Tentukan Desa
            if ($i <= $kendaldoyongTarget) {
                $desaKey = 'kendaldoyong';
            } else {
                $desaKey = $otherDesaList[array_rand($otherDesaList)];
            }
            $desaNameFormal = $desaFormal[$desaKey];

            // Tentukan Kategori
            $categoriesKeys = array_keys($templates);
            $catKey = $categoriesKeys[array_rand($categoriesKeys)];

            // Tentukan Template
            $templateList = $templates[$catKey];
            $selectedTemplate = $templateList[array_rand($templateList)];

            // RT & RW
            $rtNum = str_pad(rand(1, 8), 2, '0', STR_PAD_LEFT);
            $rwNum = str_pad(rand(1, 3), 2, '0', STR_PAD_LEFT);

            // Ganti placeholder di isi aduan
            $isiAduan = str_replace(
                ['{desa}', '{rt}', '{rw}'],
                ['Desa ' . $desaNameFormal, 'RT ' . $rtNum, 'RW ' . $rwNum],
                $selectedTemplate
            );

            // Tentukan foto default berdasarkan kategori
            $fotoPath = null;
            if (rand(0, 10) > 1) { // 90% aduan ada foto buktinya
                $fotoMap = [
                    'infrastruktur_fasilitas' => 'uploads/aduan/infrastruktur.png',
                    'kebersihan_lingkungan'   => 'uploads/aduan/kebersihan.png',
                    'layanan_publik_utilitas' => 'uploads/aduan/utilitas.png',
                    'pelayanan_administrasi'  => 'uploads/aduan/administrasi.png',
                    'keamanan_ketertiban'     => 'uploads/aduan/keamanan.png',
                    'sosial_kesejahteraan'    => 'uploads/aduan/sosial.png',
                ];
                $fotoPath = $fotoMap[$catKey] ?? null;
            }

            // Tentukan status secara acak (50% selesai, 30% diproses, 20% menunggu)
            $randStatus = rand(1, 10);
            if ($randStatus <= 5) {
                $status = 'selesai';
            } elseif ($randStatus <= 8) {
                $status = 'diproses';
            } else {
                $status = 'menunggu';
            }

            // Dapatkan tanggapan berdasarkan kategori dan status
            $tanggapan = null;
            if ($status !== 'menunggu') {
                $statusGroup = $responses[$catKey] ?? ($responses['infrastruktur_fasilitas'] ?? []);
                $tanggapanTemplate = $statusGroup[$status] ?? 'Laporan sedang ditindaklanjuti.';
                $tanggapan = str_replace('{desa_name}', $desaNameFormal, $tanggapanTemplate);
                
                // Tambahkan tanggal acak di tanggapan utilitas jika ada
                if ($catKey === 'layanan_publik_utilitas' && $status === 'selesai') {
                    $randomDay = rand(1, 28);
                    $tanggapan = str_replace('{date}', $randomDay . ' Mei 2026', $tanggapan);
                }
            }

            // Nama & NIK pelapor
            $namaPelapor = $generateName();
            $nik = $generateNik();

            // Default values
            $finalCategory = $catKey;
            $confidence = 100.0;
            $prioritas = 'biasa';

            // Panggil Flask ML API /predict untuk mendapatkan hasil klasifikasi Naive Bayes asli
            try {
                $response = Http::timeout(3)->post('http://127.0.0.1:5000/predict', [
                    'text' => $isiAduan
                ]);

                if ($response->successful()) {
                    $result = $response->json();
                    
                    if (isset($result['kategori'])) {
                        $finalCategory = is_array($result['kategori']) 
                            ? implode(', ', $result['kategori']) 
                            : $result['kategori'];
                    }
                    $confidence = $result['confidence'] ?? 100.0;
                    $prioritas = $result['prioritas'] ?? 'biasa';
                }
            } catch (\Exception $e) {
                // Jika Flask API mati, gunakan fallback bawaan kategori template
                if ($catKey === 'layanan_publik_utilitas') {
                    $prioritas = 'biasa';
                } elseif (str_contains(strtolower($isiAduan), 'rusak') || str_contains(strtolower($isiAduan), 'parah')) {
                    $prioritas = 'penting';
                }
            }

            // Simpan ke database
            Aduan::create([
                'nama_pelapor'     => $namaPelapor,
                'nik'              => $nik,
                'desa'             => $desaKey,
                'isi_aduan'        => $isiAduan,
                'foto'             => $fotoPath,
                'status'           => $status,
                'prioritas'        => $prioritas,
                'kategori'         => $finalCategory,
                'confidence_score' => $confidence,
                'tanggapan'        => $tanggapan,
                'created_at'       => now()->subDays(rand(1, 30))->subHours(rand(1, 23))->subMinutes(rand(1, 59)),
            ]);
        }
    }
}
