<?php

namespace Database\Seeders;

use App\Models\JobListing;
use App\Models\JobStage;
use App\Models\Setting;
use App\Models\User;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;

class DatabaseSeeder extends Seeder
{
    public function run(): void
    {
        // Create admin user
        User::updateOrCreate(
            ['email' => 'admin@bursakerja.online'],
            [
                'name' => 'admin',
                'email' => 'admin@bursakerja.online',
                'password' => Hash::make('123456'),
                'is_admin' => true,
            ]
        );

        // Default settings
        $settings = [
            ['key' => 'site_name', 'value' => 'Bursa Kerja', 'group' => 'general', 'label' => 'Nama Situs'],
            ['key' => 'site_description', 'value' => 'Temukan lowongan pekerjaan terbaru dan terpercaya', 'group' => 'general', 'label' => 'Deskripsi Situs'],
            ['key' => 'countdown_seconds', 'value' => '8', 'group' => 'general', 'label' => 'Durasi Countdown (detik)'],
            ['key' => 'fonnte_api_key', 'value' => '', 'group' => 'whatsapp', 'label' => 'Fonnte API Key'],
            ['key' => 'mail_host', 'value' => '', 'group' => 'smtp', 'label' => 'SMTP Host'],
            ['key' => 'mail_port', 'value' => '587', 'group' => 'smtp', 'label' => 'SMTP Port'],
            ['key' => 'mail_username', 'value' => '', 'group' => 'smtp', 'label' => 'SMTP Username'],
            ['key' => 'mail_password', 'value' => '', 'group' => 'smtp', 'label' => 'SMTP Password'],
            ['key' => 'mail_encryption', 'value' => 'tls', 'group' => 'smtp', 'label' => 'Encryption'],
            ['key' => 'mail_from_address', 'value' => '', 'group' => 'smtp', 'label' => 'From Email'],
            ['key' => 'mail_from_name', 'value' => 'Bursa Kerja', 'group' => 'smtp', 'label' => 'From Name'],
            ['key' => 'stage_advance_days', 'value' => '2', 'group' => 'notification', 'label' => 'Interval Antar Tahap (hari)'],
            ['key' => 'auto_advance', 'value' => '0', 'group' => 'notification', 'label' => 'Otomatis Loloskan (1=Ya, 0=Tidak)'],
            ['key' => 'wa_send_delay_seconds', 'value' => '10', 'group' => 'notification', 'label' => 'Delay Antar Kirim WA (detik)'],
            ['key' => 'notification_send_delay_seconds', 'value' => '3', 'group' => 'notification', 'label' => 'Delay Antar Kirim Notifikasi (detik)'],
            ['key' => 'final_auto_decision', 'value' => 'rejected', 'group' => 'notification', 'label' => 'Keputusan Akhir Otomatis'],
        ];

        foreach ($settings as $setting) {
            Setting::updateOrCreate(
                ['key' => $setting['key']],
                $setting
            );
        }

        // Sample job listings
        $jobs = [
            [
                'title' => 'Customer Service Online',
                'company' => 'PT Solusi Digital Indonesia',
                'location' => 'Jakarta (Remote)',
                'type' => 'Full-time',
                'salary_min' => 3500000,
                'salary_max' => 5000000,
                'description' => "Kami mencari Customer Service yang ramah dan profesional untuk menangani pertanyaan pelanggan melalui chat dan email.\n\nTugas utama:\n- Merespons pertanyaan pelanggan via chat, email, dan telepon\n- Menyelesaikan keluhan pelanggan dengan cepat dan efektif\n- Membuat laporan harian terkait interaksi pelanggan\n- Berkoordinasi dengan tim terkait untuk menyelesaikan masalah",
                'requirements' => "- Minimal lulusan SMA/SMK\n- Memiliki kemampuan komunikasi yang baik\n- Familiar dengan komputer dan internet\n- Bersedia bekerja dalam shift\n- Pengalaman di bidang customer service menjadi nilai tambah\n- Memiliki laptop/PC dan koneksi internet stabil",
                'benefits' => "- Gaji pokok + bonus performa\n- BPJS Kesehatan & Ketenagakerjaan\n- Training dan pengembangan karir\n- Bisa bekerja dari rumah (WFH)",
                'is_active' => true,
                'deadline' => now()->addDays(30),
                'stages' => [
                    [
                        'stage_number' => 1,
                        'name' => 'Tes Kemampuan Dasar',
                        'description' => 'Isi formulir tes kemampuan dasar komunikasi dan pengetahuan umum.',
                        'form_fields' => [
                            ['name' => 'pengalaman_cs', 'label' => 'Apakah Anda punya pengalaman Customer Service?', 'type' => 'select', 'required' => true, 'options' => 'Ya,Tidak'],
                            ['name' => 'skill_komunikasi', 'label' => 'Bagaimana Anda menangani pelanggan yang marah?', 'type' => 'textarea', 'required' => true],
                            ['name' => 'tools', 'label' => 'Tools komunikasi yang dikuasai', 'type' => 'checkbox', 'options' => 'WhatsApp Business,Zendesk,Freshdesk,Live Chat,Email'],
                        ],
                    ],
                    [
                        'stage_number' => 2,
                        'name' => 'Wawancara Online',
                        'description' => 'Jadwal wawancara online akan diinformasikan melalui email/WhatsApp.',
                        'form_fields' => null, // No form, just a pass-through stage
                    ],
                ],
            ],
            [
                'title' => 'Admin Data Entry',
                'company' => 'CV Maju Bersama',
                'location' => 'Bandung',
                'type' => 'Full-time',
                'salary_min' => 3000000,
                'salary_max' => 4000000,
                'description' => "Dibutuhkan admin data entry yang teliti dan cekatan untuk menginput data ke sistem perusahaan.\n\nTugas:\n- Input data ke sistem ERP perusahaan\n- Verifikasi keakuratan data\n- Membuat laporan mingguan\n- Filling dan arsip dokumen",
                'requirements' => "- Minimal lulusan SMA/SMK\n- Menguasai Microsoft Excel\n- Teliti dan detail-oriented\n- Mampu bekerja di bawah tekanan\n- Pengalaman minimal 1 tahun di posisi serupa",
                'benefits' => "- Gaji pokok\n- Tunjangan makan & transport\n- BPJS\n- THR",
                'is_active' => true,
                'deadline' => now()->addDays(20),
                'stages' => [
                    [
                        'stage_number' => 1,
                        'name' => 'Tes Kemampuan Excel',
                        'description' => 'Isi formulir tentang kemampuan Excel dan data entry Anda.',
                        'form_fields' => [
                            ['name' => 'level_excel', 'label' => 'Level kemampuan Excel Anda', 'type' => 'select', 'required' => true, 'options' => 'Dasar,Menengah,Mahir'],
                            ['name' => 'rumus_excel', 'label' => 'Rumus Excel yang sering Anda gunakan', 'type' => 'text', 'required' => true],
                            ['name' => 'kecepatan_mengetik', 'label' => 'Kecepatan mengetik (WPM)', 'type' => 'number', 'required' => true],
                        ],
                    ],
                ],
            ],
            [
                'title' => 'Social Media Specialist',
                'company' => 'PT Kreatif Media Nusantara',
                'location' => 'Surabaya (Hybrid)',
                'type' => 'Full-time',
                'salary_min' => 4500000,
                'salary_max' => 7000000,
                'description' => "Bergabunglah dengan tim kreatif kami sebagai Social Media Specialist!\n\nTanggung jawab:\n- Mengelola akun media sosial perusahaan (Instagram, TikTok, Facebook)\n- Membuat konten kreatif dan engaging\n- Menganalisis performa konten\n- Berinteraksi dengan followers",
                'requirements' => "- S1 Komunikasi/Marketing atau bidang terkait\n- Pengalaman min. 2 tahun di social media marketing\n- Mahir menggunakan tools desain (Canva, Adobe)\n- Paham analytics dan reporting\n- Kreatif dan up-to-date dengan trend",
                'benefits' => "- Gaji kompetitif\n- Bonus project\n- Flexible working hours\n- MacBook untuk kerja\n- Asuransi kesehatan",
                'is_active' => true,
                'deadline' => now()->addDays(25),
                'stages' => [
                    [
                        'stage_number' => 1,
                        'name' => 'Portofolio & Kreativitas',
                        'description' => 'Kirimkan link portofolio dan jawab pertanyaan kreativitas.',
                        'form_fields' => [
                            ['name' => 'link_portfolio', 'label' => 'Link Portfolio (Instagram/Behance/dll)', 'type' => 'text', 'required' => true],
                            ['name' => 'platform', 'label' => 'Platform yang paling Anda kuasai', 'type' => 'checkbox', 'options' => 'Instagram,TikTok,Facebook,Twitter/X,LinkedIn,YouTube'],
                            ['name' => 'ide_konten', 'label' => 'Berikan ide konten viral untuk brand fashion lokal', 'type' => 'textarea', 'required' => true],
                        ],
                    ],
                    [
                        'stage_number' => 2,
                        'name' => 'Tes Praktik',
                        'description' => 'Buat satu konten sesuai brief yang diberikan.',
                        'form_fields' => [
                            ['name' => 'link_konten', 'label' => 'Link hasil konten yang sudah dibuat', 'type' => 'text', 'required' => true],
                            ['name' => 'deskripsi_konsep', 'label' => 'Jelaskan konsep konten Anda', 'type' => 'textarea', 'required' => true],
                        ],
                    ],
                    [
                        'stage_number' => 3,
                        'name' => 'Interview Final',
                        'description' => 'Wawancara akhir dengan tim manajemen.',
                        'form_fields' => null,
                    ],
                ],
            ],
            [
                'title' => 'Driver Pengiriman',
                'company' => 'PT Logistik Cepat',
                'location' => 'Semarang',
                'type' => 'Full-time',
                'salary_min' => 3000000,
                'salary_max' => 4500000,
                'description' => "Dibutuhkan driver pengiriman barang area Semarang dan sekitarnya.\n\nTugas:\n- Mengirim paket ke alamat tujuan\n- Memastikan barang sampai dalam kondisi baik\n- Membuat laporan pengiriman harian",
                'requirements' => "- Minimal SMP\n- Memiliki SIM C/A\n- Mengenal area Semarang\n- Memiliki kendaraan sendiri (motor)\n- Jujur dan bertanggung jawab\n- Sehat jasmani dan rohani",
                'benefits' => "- Gaji pokok\n- Insentif per pengiriman\n- BBM ditanggung\n- BPJS",
                'is_active' => true,
                'deadline' => now()->addDays(15),
                'stages' => [
                    [
                        'stage_number' => 1,
                        'name' => 'Verifikasi Dokumen',
                        'description' => 'Upload dokumen yang diperlukan.',
                        'form_fields' => [
                            ['name' => 'jenis_sim', 'label' => 'Jenis SIM yang dimiliki', 'type' => 'select', 'required' => true, 'options' => 'SIM C,SIM A,SIM C & A'],
                            ['name' => 'jenis_kendaraan', 'label' => 'Jenis kendaraan yang dimiliki', 'type' => 'text', 'required' => true],
                            ['name' => 'area_familiar', 'label' => 'Area Semarang yang Anda hafal', 'type' => 'textarea', 'required' => true],
                        ],
                    ],
                ],
            ],
            [
                'title' => 'Freelance Content Writer',
                'company' => 'PT Media Konten Digital',
                'location' => 'Remote (Seluruh Indonesia)',
                'type' => 'Freelance',
                'salary_min' => 2000000,
                'salary_max' => 5000000,
                'description' => "Cari penulis konten freelance untuk menulis artikel SEO-friendly.\n\nTugas:\n- Menulis artikel 500-1500 kata\n- Riset keyword dan topik\n- Editing dan proofreading\n- Submit tepat waktu",
                'requirements' => "- Mampu menulis dalam Bahasa Indonesia yang baik dan benar\n- Paham dasar SEO\n- Bisa bekerja mandiri\n- Memiliki portfolio tulisan\n- Laptop dan internet stabil",
                'benefits' => "- Bayaran per artikel\n- Waktu kerja fleksibel\n- Bonus untuk artikel berkualitas tinggi\n- Kesempatan kerja jangka panjang",
                'is_active' => true,
                'deadline' => now()->addDays(45),
                'stages' => [
                    [
                        'stage_number' => 1,
                        'name' => 'Tes Menulis',
                        'description' => 'Kirim contoh tulisan untuk dinilai.',
                        'form_fields' => [
                            ['name' => 'link_portfolio', 'label' => 'Link portfolio tulisan (blog/medium/dll)', 'type' => 'text', 'required' => false],
                            ['name' => 'topik_favorit', 'label' => 'Topik yang paling Anda kuasai', 'type' => 'text', 'required' => true],
                            ['name' => 'contoh_paragraf', 'label' => 'Tulis paragraf pembuka artikel tentang "Tips Produktivitas WFH"', 'type' => 'textarea', 'required' => true],
                            ['name' => 'paham_seo', 'label' => 'Apakah Anda paham SEO?', 'type' => 'radio', 'required' => true, 'options' => 'Ya - mahir,Ya - dasar,Belum tapi mau belajar'],
                        ],
                    ],
                    [
                        'stage_number' => 2,
                        'name' => 'Tes Artikel Lengkap',
                        'description' => 'Tulis satu artikel lengkap sesuai brief.',
                        'form_fields' => [
                            ['name' => 'judul_artikel', 'label' => 'Judul artikel Anda', 'type' => 'text', 'required' => true],
                            ['name' => 'isi_artikel', 'label' => 'Isi artikel (min. 500 kata)', 'type' => 'textarea', 'required' => true],
                        ],
                    ],
                ],
            ],
            [
                'title' => 'Kasir Minimarket',
                'company' => 'Toko Sejahtera',
                'location' => 'Yogyakarta',
                'type' => 'Part-time',
                'salary_min' => 1800000,
                'salary_max' => 2500000,
                'description' => "Dibutuhkan kasir untuk minimarket di area Yogyakarta.\n\nTugas:\n- Melayani transaksi pembeli\n- Menata dan mengecek stok barang\n- Menjaga kebersihan area kerja",
                'requirements' => "- Minimal SMA/SMK\n- Jujur dan ramah\n- Bersedia bekerja shift\n- Teliti dalam menghitung\n- Domisili Yogyakarta",
                'benefits' => "- Gaji bulanan\n- Tunjangan shift malam\n- Diskon belanja",
                'is_active' => true,
                'deadline' => now()->addDays(10),
                'stages' => [
                    [
                        'stage_number' => 1,
                        'name' => 'Data Tambahan',
                        'description' => 'Lengkapi data tambahan untuk seleksi.',
                        'form_fields' => [
                            ['name' => 'domisili', 'label' => 'Alamat lengkap domisili', 'type' => 'textarea', 'required' => true],
                            ['name' => 'bersedia_shift', 'label' => 'Bersedia bekerja shift malam?', 'type' => 'radio', 'required' => true, 'options' => 'Ya,Tidak'],
                            ['name' => 'tanggal_mulai', 'label' => 'Tanggal bisa mulai bekerja', 'type' => 'date', 'required' => true],
                        ],
                    ],
                ],
            ],
        ];

        foreach ($jobs as $jobData) {
            $stages = $jobData['stages'] ?? [];
            unset($jobData['stages']);

            $job = JobListing::updateOrCreate(
                ['title' => $jobData['title'], 'company' => $jobData['company']],
                $jobData
            );

            // Create stages for this job
            foreach ($stages as $stageData) {
                JobStage::updateOrCreate(
                    ['job_listing_id' => $job->id, 'stage_number' => $stageData['stage_number']],
                    [
                        'name' => $stageData['name'],
                        'description' => $stageData['description'],
                        'form_fields' => $stageData['form_fields'],
                        'is_active' => true,
                        'sort_order' => $stageData['stage_number'],
                    ]
                );
            }
        }
    }
}
