<?php

namespace App\Filament\Resources\AduanResource\Schemas;

use Filament\Schemas\Schema;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\FileUpload;
use Filament\Schemas\Components\Section;
use Filament\Schemas\Components\Grid;

class AduanForm
{
    // Daftar 21 Desa di Kecamatan Wonosalam, Kabupaten Demak, Jawa Tengah
    const DESA_WONOSALAM = [
        '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',
    ];

    public static function configure(Schema $schema): Schema
    {
        return $schema->components([

            // ============================
            // 👤 IDENTITAS PELAPOR
            // ============================
            Section::make('Identitas Pelapor')
                ->description('Isi identitas resmi pelapor.')
                ->icon('heroicon-o-user')
                ->collapsible()
                ->schema([
                    Grid::make(2)->schema([
                        TextInput::make('nama_pelapor')
                            ->label('Nama Pelapor')
                            ->placeholder('Nama lengkap pelapor (Wajib)')
                            ->required()
                            ->maxLength(255),

                        TextInput::make('nik')
                            ->label('NIK')
                            ->placeholder('Nomor Induk Kependudukan (opsional)')
                            ->maxLength(16)
                            ->numeric(),
                    ]),
                ]),

            // ============================
            // 📝 ISI ADUAN
            // ============================
            Section::make('Isi Aduan')
                ->icon('heroicon-o-chat-bubble-left-ellipsis')
                ->schema([
                    Select::make('desa')
                        ->label('Lokasi Desa')
                        ->options(self::DESA_WONOSALAM)
                        ->required()
                        ->placeholder('Pilih desa lokasi kejadian'),

                    Textarea::make('isi_aduan')
                        ->label('Isi Aduan')
                        ->required()
                        ->rows(4)
                        ->placeholder('Deskripsikan aduan atau masalah yang ingin Anda laporkan...'),

                    FileUpload::make('foto')
                        ->label('Foto Bukti (Opsional)')
                        ->image()
                        ->disk('public')
                        ->visibility('public')
                        ->directory('uploads/aduan')
                        ->maxSize(5120)
                        ->imagePreviewHeight('200')
                        ->acceptedFileTypes(['image/jpeg', 'image/png', 'image/webp'])
                        ->helperText('Upload foto bukti aduan. Maks 5MB. Format: JPG, PNG, WEBP.'),
                ]),

            // ============================
            // 🤖 HASIL KLASIFIKASI ML
            // ============================
            Section::make('Klasifikasi Sistem ML (TF-IDF & Naive Bayes)')
                ->icon('heroicon-o-cpu-chip')
                ->description('Kolom ini diisi otomatis oleh sistem setelah aduan disimpan.')
                ->collapsible()
                ->schema([
                    Grid::make(2)->schema([
                        TextInput::make('kategori')
                            ->label('Kategori Aduan')
                            ->disabled()
                            ->helperText('Diisi otomatis berdasarkan klasifikasi Naive Bayes.'),

                        TextInput::make('confidence_score')
                            ->label('Confidence Score (%)')
                            ->disabled()
                            ->suffix('%')
                            ->helperText('Tingkat keyakinan algoritma Naive Bayes dalam mengklasifikasikan aduan ini.'),
                    ]),

                    Grid::make(2)->schema([
                        Select::make('prioritas')
                            ->label('Tingkat Prioritas')
                            ->options([
                                'penting' => 'Penting',
                                'biasa'   => 'Biasa',
                            ])
                            ->default('biasa'),

                        Select::make('status')
                            ->label('Status Aduan')
                            ->options([
                                'menunggu' => 'Menunggu',
                                'diproses' => 'Diproses',
                                'selesai'  => 'Selesai',
                            ])
                            ->default('menunggu')
                            ->required(),
                    ]),
                ]),

            // ============================
            // 💬 TANGGAPAN PETUGAS
            // ============================
            Section::make('Tanggapan Petugas')
                ->icon('heroicon-o-chat-bubble-bottom-center-text')
                ->description('Diisi oleh petugas kecamatan saat aduan diproses atau diselesaikan.')
                ->collapsible()
                ->schema([
                    Textarea::make('tanggapan')
                        ->label('Tanggapan / Respon Resmi')
                        ->rows(3)
                        ->placeholder('Tulis tanggapan atau tindak lanjut terhadap aduan ini...'),
                ]),
        ]);
    }
}
