<?php

namespace Database\Seeders;

use App\Models\User;
use App\Models\Laporan;
use App\Models\TindakanSatgas;
use App\Models\TindakanPenilai;
use App\Models\CatatanKlinisPsikolog;
use App\Models\EksekusiRektor;
use Illuminate\Database\Seeder;
use Illuminate\Support\Carbon;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     */
    public function run(): void
    {
        // 1. Seed Users for 6 roles
        $users = [
            [
                'name' => 'Aditya Prasetyo (Mahasiswa/Dosen)',
                'email' => 'pelapor@lldikti3.test',
                'password' => bcrypt('password'),
                'role' => 'mahasiswa_dosen',
                'nim_nidn' => '2023101001',
                'prodi' => 'Teknologi Informasi',
                'pts_nama' => 'Universitas Bina Nusantara',
            ],
            [
                'name' => 'Kristiani Gulo (Mahasiswa/Dosen)',
                'email' => 'ingatkristianigulo@gmail.com',
                'password' => bcrypt('password'),
                'role' => 'mahasiswa_dosen',
                'nim_nidn' => '2023101005',
                'prodi' => 'Teknologi Informasi',
                'pts_nama' => 'Universitas Bina Nusantara',
            ],
            [
                'name' => 'Budi Santoso (Satgas Kampus)',
                'email' => 'satgas@lldikti3.test',
                'password' => bcrypt('password'),
                'role' => 'satgas_kampus',
                'nim_nidn' => '1988051201',
                'prodi' => 'Kemahasiswaan',
                'pts_nama' => 'Universitas Bina Nusantara',
            ],
            [
                'name' => 'Prof. Dr. Ir. Hermawan (Tim Penilai Ilmiah)',
                'email' => 'penilai@lldikti3.test',
                'password' => bcrypt('password'),
                'role' => 'tim_penilai',
                'nim_nidn' => '1975091802',
                'prodi' => 'Senat Akademik',
                'pts_nama' => 'Universitas Tarumanagara',
            ],
            [
                'name' => 'Clara S.Psi, M.Psi (Psikolog)',
                'email' => 'psikolog@lldikti3.test',
                'password' => bcrypt('password'),
                'role' => 'psikolog',
                'nim_nidn' => '1990110304',
                'prodi' => 'Pusat Layanan Konseling',
                'pts_nama' => 'Universitas Bina Nusantara',
            ],
            [
                'name' => 'Prof. Dr. Hartono (Rektor / Pimpinan PTS)',
                'email' => 'rektor@lldikti3.test',
                'password' => bcrypt('password'),
                'role' => 'rektor',
                'nim_nidn' => '1968032501',
                'prodi' => 'Rektorat',
                'pts_nama' => 'Universitas Bina Nusantara',
            ],
            [
                'name' => 'Dr. Elly (Kepala ADIA (LLDIKTI III))',
                'email' => 'lldikti@lldikti3.test',
                'password' => bcrypt('password'),
                'role' => 'lldikti',
                'nim_nidn' => '1970123001',
                'prodi' => 'Seksi Akademik & Kemahasiswaan',
                'pts_nama' => null, // LLDIKTI monitors all PTS
            ],
        ];

        foreach ($users as $userData) {
            User::create($userData);
        }

        // Additional Users for different PTS to enrich metrics
        User::create([
            'name' => 'Dr. Ahmad (Rektor Gunadarma)',
            'email' => 'rektor2@lldikti3.test',
            'password' => bcrypt('password'),
            'role' => 'rektor',
            'nim_nidn' => '1965022101',
            'prodi' => 'Rektorat',
            'pts_nama' => 'Universitas Gunadarma',
        ]);

        $pelaporUser = User::where('email', 'pelapor@lldikti3.test')->first();
        $satgasUser = User::where('email', 'satgas@lldikti3.test')->first();
        $penilaiUser = User::where('email', 'penilai@lldikti3.test')->first();
        $psikologUser = User::where('email', 'psikolog@lldikti3.test')->first();
        $rektorUser = User::where('email', 'rektor@lldikti3.test')->first();

        // 2. Seed Mock Cases for Transaction Flow

        // Kasus 1: Selesai (Bullying -> Satgas -> Psikolog -> Rektor -> Selesai)
        $case1 = Laporan::create([
            'user_id' => $pelaporUser->id,
            'pelapor_nama' => 'Aditya Prasetyo',
            'pelapor_nim_nidn' => '2023101001',
            'pelapor_email' => 'pelapor@univ.test',
            'pts_nama' => 'Universitas Bina Nusantara',
            'tipe_laporan' => 'kekerasan_bullying',
            'judul' => 'Perundungan Verbal di Kantin Kampus',
            'deskripsi' => 'Saya mengalami perundungan verbal secara berulang oleh kelompok mahasiswa angkatan atas di area kantin gedung utama.',
            'status' => 'selesai',
            'pelapor_tipe' => 'Mahasiswa',
            'jenis_identitas' => 'KTM',
            'no_telepon' => '081234567890',
            'file_identitas' => 'identitas_dummy.png',
            'file_bukti' => 'bukti_dummy.png',
            'jenis_kelamin' => 'Laki-Laki',
            'tanggal_kejadian' => Carbon::now()->subDays(16)->format('Y-m-d'),
            'lokasi_kejadian' => 'Kantin Gedung Utama',
            'jenis_kekerasan' => 'Perundungan (Bullying)',
            'created_at' => Carbon::now()->subDays(15),
            'updated_at' => Carbon::now()->subDays(10),
        ]);

        TindakanSatgas::create([
            'laporan_id' => $case1->id,
            'satgas_id' => $satgasUser->id,
            'lindungi_korban' => true,
            'bantuan_hukum_rumah_aman' => 'Penyediaan pendampingan hukum dan penempatan di Rumah Aman Kampus selama 3 hari.',
            'catatan' => 'Korban dievakuasi dari lingkungan kantin dan difasilitasi mediasi awal.',
            'created_at' => Carbon::now()->subDays(14),
        ]);

        CatatanKlinisPsikolog::create([
            'laporan_id' => $case1->id,
            'psikolog_id' => $psikologUser->id,
            'sesi_konseling_online' => 'https://zoom.us/j/1234567890 (Telah dilaksanakan pada 10 Juni 2026)',
            'catatan_klinis' => 'Korban mengalami kecemasan tingkat sedang (F41.1). Diberikan terapi kognitif perilaku (CBT) sebanyak 2 sesi.',
            'log_pemulihan' => 'Kondisi psikologis pelapor stabil, kecemasan mereda, dan siap kembali beraktivitas.',
            'created_at' => Carbon::now()->subDays(12),
        ]);

        EksekusiRektor::create([
            'laporan_id' => $case1->id,
            'rektor_id' => $rektorUser->id,
            'sanksi_eksekusi' => 'Surat Peringatan Keras (SP2) untuk pelaku bullying dan pembatasan akses kantin selama 1 semester.',
            'catatan' => 'Sanksi telah ditandatangani dan dikirimkan ke pihak dekanat.',
            'created_at' => Carbon::now()->subDays(10),
        ]);


        // Kasus 2: Menunggu Rektor (Integritas Akademik -> Tim Penilai -> Rektor)
        $case2 = Laporan::create([
            'user_id' => $pelaporUser->id,
            'pelapor_nama' => 'Aditya Prasetyo',
            'pelapor_nim_nidn' => '2023101001',
            'pelapor_email' => 'pelapor@univ.test',
            'pts_nama' => 'Universitas Bina Nusantara',
            'tipe_laporan' => 'integritas_akademik',
            'judul' => 'Plagiarisme Tugas Akhir Skripsi oleh Mahasiswa X',
            'deskripsi' => 'Ditemukan kesamaan konten hingga 80% pada bab 3 dan bab 4 draf skripsi milik mahasiswa X dengan karya ilmiah yang terbit di Jurnal LLDIKTI.',
            'status' => 'menunggu_rektor',
            'pelapor_tipe' => 'Mahasiswa',
            'jenis_identitas' => 'KTM',
            'no_telepon' => '081234567890',
            'file_identitas' => 'identitas_dummy.png',
            'file_bukti' => 'bukti_dummy.png',
            'jenis_kelamin' => 'Laki-Laki',
            'tanggal_kejadian' => Carbon::now()->subDays(8)->format('Y-m-d'),
            'lokasi_kejadian' => 'Sistem Akademik Kampus',
            'jenis_kekerasan' => null,
            'created_at' => Carbon::now()->subDays(7),
            'updated_at' => Carbon::now()->subDays(5),
        ]);

        TindakanPenilai::create([
            'laporan_id' => $case2->id,
            'penilai_id' => $penilaiUser->id,
            'sidang_etik_detail' => 'Sidang Etik Akademik dilaksanakan pada 28 Juni 2026 menghadirkan dosen pembimbing dan terlapor.',
            'cek_plagiat_score' => 82,
            'rekomendasi_sanksi' => 'Pembatalan draf skripsi saat ini, kewajiban menulis ulang topik baru dari awal, dan skorsing 1 semester.',
            'created_at' => Carbon::now()->subDays(5),
        ]);


        // Kasus 3: Menunggu Psikolog (Preventif Konseling -> Psikolog)
        Laporan::create([
            'user_id' => $pelaporUser->id,
            'pelapor_nama' => 'Aditya Prasetyo',
            'pelapor_nim_nidn' => '2023101001',
            'pelapor_email' => 'pelapor@univ.test',
            'pts_nama' => 'Universitas Bina Nusantara',
            'tipe_laporan' => 'preventif_konseling',
            'judul' => 'Stres Akademik Akibat Beban Kuliah',
            'deskripsi' => 'Saya merasa sangat stres dan mengalami burnout akibat beban tugas akhir dan persiapan sidang. Membutuhkan bimbingan psikolog.',
            'jalur' => 'mandiri',
            'status' => 'menunggu_psikolog',
            'pelapor_tipe' => 'Mahasiswa',
            'jenis_identitas' => 'KTM',
            'no_telepon' => '081234567890',
            'file_identitas' => 'identitas_dummy.png',
            'file_bukti' => null,
            'jenis_kelamin' => 'Laki-Laki',
            'tanggal_kejadian' => Carbon::now()->subDays(3)->format('Y-m-d'),
            'lokasi_kejadian' => 'Rumah / Kost Pelapor',
            'jenis_kekerasan' => null,
            'created_at' => Carbon::now()->subDays(2),
            'updated_at' => Carbon::now()->subDays(2),
        ]);


        // Kasus 4: Menunggu Satgas (Bullying Baru)
        Laporan::create([
            'user_id' => $pelaporUser->id,
            'pelapor_nama' => 'Aditya Prasetyo',
            'pelapor_nim_nidn' => '2023101001',
            'pelapor_email' => 'pelapor@univ.test',
            'pts_nama' => 'Universitas Bina Nusantara',
            'tipe_laporan' => 'kekerasan_bullying',
            'judul' => 'Kasus Cyberbullying di Grup Angkatan',
            'deskripsi' => 'Terjadi intimidasi secara masif kepada salah satu mahasiswa baru di grup WhatsApp angkatan oleh beberapa mahasiswa senior.',
            'status' => 'menunggu_satgas',
            'pelapor_tipe' => 'Mahasiswa',
            'jenis_identitas' => 'KTM',
            'no_telepon' => '081234567890',
            'file_identitas' => 'identitas_dummy.png',
            'file_bukti' => 'bukti_dummy.png',
            'jenis_kelamin' => 'Laki-Laki',
            'tanggal_kejadian' => Carbon::now()->subDays(2)->format('Y-m-d'),
            'lokasi_kejadian' => 'WhatsApp Group Angkatan',
            'jenis_kekerasan' => 'Kekerasan Daring (Cyberbullying)',
            'created_at' => Carbon::now()->subDays(1),
            'updated_at' => Carbon::now()->subDays(1),
        ]);


        // Kasus 5: ALARM! Kasus Mandek > 30 Hari
        // Kita buat kasus di Universitas Gunadarma yang terhenti pada tahap Tim Penilai sejak 40 hari lalu.
        $case5 = Laporan::create([
            'user_id' => null,
            'pelapor_nama' => 'Rizki Hidayat',
            'pelapor_nim_nidn' => '2023101003',
            'pelapor_email' => 'rizki@gunadarma.test',
            'pts_nama' => 'Universitas Gunadarma',
            'tipe_laporan' => 'integritas_akademik',
            'judul' => 'Pemalsuan Tanda Tangan Kartu Hasil Studi',
            'deskripsi' => 'Diduga ada mahasiswa yang mengubah nilai KHS dengan memalsukan tanda tangan Ketua Program Studi.',
            'status' => 'menunggu_penilai',
            'pelapor_tipe' => 'Mahasiswa',
            'jenis_identitas' => 'KTM',
            'no_telepon' => '089876543210',
            'file_identitas' => 'identitas_dummy.png',
            'file_bukti' => 'bukti_dummy.png',
            'jenis_kelamin' => 'Laki-Laki',
            'tanggal_kejadian' => Carbon::now()->subDays(42)->format('Y-m-d'),
            'lokasi_kejadian' => 'Gedung Rektorat Lt. 2',
            'jenis_kekerasan' => null,
            'created_at' => Carbon::now()->subDays(40),
            'updated_at' => Carbon::now()->subDays(40),
        ]);
    }
}
