<?php

namespace App\Filament\Resources;

use App\Filament\Resources\SuratUtamaResource\Pages;
use App\Filament\Resources\SuratUtamaResource\RelationManagers;
use App\Models\SuratUtama;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Filament\Forms\Components\FileUpload; // Import FileUpload
use Filament\Forms\Components\DatePicker; // Import DatePicker
use Filament\Forms\Components\Select; // Import Select
use Filament\Forms\Components\TextInput; // Import TextInput
use Filament\Forms\Components\Textarea; // Import Textarea
use Filament\Forms\Components\Section; // Import Section
use Filament\Forms\Components\TimePicker;
use Filament\Tables\Columns\TextColumn; // Import TextColumn
use Filament\Tables\Columns\IconColumn; // Import IconColumn
use Filament\Tables\Filters\SelectFilter; // Import SelectFilter
use Filament\Forms\Get; // Import Get
use Filament\Notifications\Notification;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;

class SuratUtamaResource extends Resource
{
    protected static ?string $model = SuratUtama::class;

    protected static ?string $navigationIcon = 'heroicon-o-document-duplicate';
    protected static ?string $navigationGroup = 'Manajemen Surat';
    protected static ?string $navigationLabel = 'Semua Surat';
    protected static ?string $pluralLabel = 'Daftar Surat';

    public static function form(Form $form): Form
    {
        return $form
            ->schema([
                Section::make('Informasi Umum Surat')
                    ->columns(2)
                    ->schema([
                        Select::make('id_tipe_surat')
                            ->label('Jenis Surat')
                            ->options([
                                'surat_kelahiran' => 'Surat Kelahiran',
                                'surat_kematian' => 'Surat Kematian',
                                'surat_keterangan_ahli_waris' => 'Surat Keterangan Ahli Waris',
                                'surat_keterangan_domisili' => 'Surat Keterangan Domisili',
                                'surat_keterangan_kehilangan' => 'Surat Keterangan Kehilangan',
                                'surat_keterangan_skck' => 'Surat Keterangan SKCK',
                                'surat_keterangan_usaha' => 'Surat Keterangan Usaha',
                                'surat_pendatang' => 'Surat Keterangan Pendatang',
                                'surat_pengantar_perkawinan' => 'Surat Pengantar Perkawinan',
                                'surat_permohonan' => 'Surat Permohonan',
                                'surat_pindah' => 'Surat Keterangan Pindah',
                                'surat_sktm' => 'Surat Keterangan Tidak Mampu (SKTM)',
                            ])
                            ->required()
                            ->live() // Penting untuk memperbarui form secara dinamis
                            ->afterStateUpdated(fn (Forms\Set $set) => $set('nomor_surat', null)), // Reset nomor_surat saat jenis surat berubah
                        TextInput::make('nomor_surat')
                            ->label('Nomor Surat')
                            ->unique(ignoreRecord: true) // Pastikan nomor unik
                            ->nullable(), // Nullable karena mungkin dibuat setelah approval
                        DatePicker::make('tanggal_pengajuan')
                            ->label('Tanggal Pengajuan')
                            ->required()
                            ->default(now()),
                        Select::make('status')
                            ->label('Status')
                            ->options([
                                'menunggu_acc_admin_desa' => 'Menunggu ACC Admin Desa',
                                'disetujui' => 'Disetujui',
                                'ditolak' => 'Ditolak',
                            ])
                            ->required()
                            ->default('menunggu_acc_admin_desa')
                            ->live(), // Untuk menampilkan/menyembunyikan catatan penolakan
                        Textarea::make('catatan_penolakan')
                            ->label('Catatan Penolakan')
                            ->hidden(fn (Get $get): bool => $get('status') !== 'ditolak')
                            ->nullable(),
                        FileUpload::make('file_path')
                            ->label('Upload File Surat')
                            ->acceptedFileTypes(['application/pdf'])
                            ->directory('surat_files') // Folder penyimpanan
                            ->hidden()
                            ->nullable(),
                        Select::make('disetujui_oleh')
                            ->label('Disetujui Oleh')
                            ->relationship('disetujuiOleh', 'name') // Asumsi ada relasi ke model User
                            ->searchable()
                            ->preload()
                            ->nullable(),
                        DatePicker::make('tanggal_disetujui')
                            ->label('Tanggal Disetujui')
                            ->nullable(),
                    ]),

                // Bagian untuk Kolom Umum Pemohon/Subjek Surat
                Section::make('Informasi Pemohon / Subjek Surat')
                    ->columns(2)
                    ->schema([
                        TextInput::make('nama_lengkap')
                            ->label('Nama Lengkap')
                            ->nullable(),
                        TextInput::make('nik')
                            ->label('NIK')
                            ->nullable(),
                        DatePicker::make('tanggal_lahir')
                            ->label('Tanggal Lahir')
                            ->nullable(),
                        TextInput::make('tempat_lahir')
                            ->label('Tempat Lahir')
                            ->nullable(),
                        Select::make('jenis_kelamin')
                            ->label('Jenis Kelamin')
                            ->options([
                                'Laki-laki' => 'Laki-laki',
                                'Perempuan' => 'Perempuan',
                            ])
                            ->nullable(),
                        TextInput::make('pekerjaan')
                            ->label('Pekerjaan')
                            ->nullable(),
                        TextInput::make('agama')
                            ->label('Agama')
                            ->nullable(),
                        TextInput::make('no_hp')
                            ->label('Nomor HP')
                            ->minLength(13)
                            ->maxLength(13)
                            ->required(),
                        Textarea::make('alamat')
                            ->label('Alamat')
                            ->columnSpanFull()
                            ->nullable(),
                    ]),

                // BAGIAN KHUSUS UNTUK SETIAP JENIS SURAT
                // Surat Kelahiran
                Section::make('Informasi Bayi dan Orang Tua (Surat Kelahiran)')
                    ->columns(2)
                    ->hidden(fn (Get $get): bool => $get('id_tipe_surat') !== 'surat_kelahiran')
                    ->schema([
                        TextInput::make('nama_bayi')->label('Nama Bayi')->required(),
                        TextInput::make('nik_bayi')->label('NIK Bayi')->nullable(),
                        DatePicker::make('tanggal_lahir_bayi')->label('Tanggal Lahir Bayi')->required(),
                        TextInput::make('tempat_lahir_bayi')->label('Tempat Lahir Bayi')->required(),
                        Select::make('jenis_kelamin_bayi')
                            ->label('Jenis Kelamin Bayi')
                            ->options(['Laki-laki' => 'Laki-laki', 'Perempuan' => 'Perempuan'])
                            ->required(),
                        TextInput::make('berat_bayi_kg')->label('Berat Bayi (kg)')->numeric()->nullable(),
                        TextInput::make('panjang_bayi_cm')->label('Panjang Bayi (cm)')->numeric()->nullable(),
                        TextInput::make('anak_ke')->label('Anak Ke')->nullable(),
                        Section::make('Data Ayah')
                            ->columns(2)
                            ->schema([
                                TextInput::make('nama_ayah')->label('Nama Ayah')->required(),
                                TextInput::make('nik_ayah')->label('NIK Ayah')->nullable(),
                                DatePicker::make('tanggal_lahir_ayah')->label('Tanggal Lahir Ayah')->nullable(),
                                TextInput::make('tempat_lahir_ayah')->label('Tempat Lahir Ayah')->nullable(),
                                TextInput::make('pekerjaan_ayah')->label('Pekerjaan Ayah')->nullable(),
                                Textarea::make('alamat_ayah')->label('Alamat Ayah')->columnSpanFull()->nullable(),
                            ]),
                        Section::make('Data Ibu')
                            ->columns(2)
                            ->schema([
                                TextInput::make('nama_ibu')->label('Nama Ibu')->required(),
                                TextInput::make('nik_ibu')->label('NIK Ibu')->nullable(),
                                DatePicker::make('tanggal_lahir_ibu')->label('Tanggal Lahir Ibu')->nullable(),
                                TextInput::make('tempat_lahir_ibu')->label('Tempat Lahir Ibu')->nullable(),
                                TextInput::make('pekerjaan_ibu')->label('Pekerjaan Ibu')->nullable(),
                                Textarea::make('alamat_ibu')->label('Alamat Ibu')->columnSpanFull()->nullable(),
                            ]),
                        Section::make('Data Pelapor Kelahiran')
                            ->columns(2)
                            ->schema([
                                TextInput::make('nama_pelapor')->label('Nama Pelapor')->required(),
                                TextInput::make('nik_pelapor')->label('NIK Pelapor')->required(),
                                TextInput::make('hubungan_pelapor_dengan_bayi')->label('Hubungan Pelapor dengan Bayi')->required(),
                            ]),
                    ]),

                // Surat Kematian
                Section::make('Informasi Kematian (Surat Kematian)')
                    ->columns(2)
                    ->hidden(fn (Get $get): bool => $get('id_tipe_surat') !== 'surat_kematian')
                    ->schema([
                        DatePicker::make('tanggal_kematian')->label('Tanggal Kematian')->required(),
                        TimePicker::make('waktu_kematian')->label('Waktu Kematian')->required(),
                        TextInput::make('tempat_kematian')->label('Tempat Kematian')->required(),
                        Textarea::make('sebab_kematian')->label('Sebab Kematian')->columnSpanFull()->required(),
                        TextInput::make('tempat_pemakaman')->label('Tempat Pemakaman')->nullable(),
                        TextInput::make('nama_pelapor_kematian')->label('Nama Pelapor Kematian')->required(),
                        TextInput::make('nik_pelapor_kematian')->label('NIK Pelapor Kematian')->nullable(),
                        TextInput::make('hubungan_pelapor_dengan_almarhum')->label('Hubungan Pelapor dengan Almarhum')->required(),
                        TextInput::make('nama_saksi_kematian_1')->label('Nama Saksi 1')->nullable(),
                        TextInput::make('nik_saksi_kematian_1')->label('NIK Saksi 1')->nullable(),
                        TextInput::make('nama_saksi_kematian_2')->label('Nama Saksi 2')->nullable(),
                        TextInput::make('nik_saksi_kematian_2')->label('NIK Saksi 2')->nullable(),
                    ]),

                // Surat Keterangan Ahli Waris / SKCK / Usaha / Permohonan / SKTM (menggunakan keperluan)
                Section::make('Detail Keperluan (Surat Keterangan)')
                    ->columns(1)
                    ->hidden(fn (Get $get): bool => !in_array($get('id_tipe_surat'), [
                        'surat_keterangan_ahli_waris',
                        'surat_keterangan_skck',
                        'surat_keterangan_usaha',
                        'surat_permohonan',
                        'surat_sktm',
                        'surat_keterangan_domisili', // Domisili juga punya keperluan
                        'surat_keterangan_kehilangan', // Kehilangan juga punya keperluan
                        'surat_pendatang', // Pendatang juga bisa punya tujuan/keperluan
                    ]))
                    ->schema([
                        Textarea::make('keperluan')
                            ->label('Maksud dan Tujuan / Keperluan')
                            ->required(fn (Get $get): bool => in_array($get('id_tipe_surat'), [
                                'surat_keterangan_ahli_waris', 'surat_keterangan_skck', 'surat_keterangan_usaha',
                                'surat_permohonan', 'surat_sktm'
                            ]))
                            ->nullable(),

                        // Khusus Ahli Waris
                        TextInput::make('jumlah_ahli_waris')
                            ->label('Jumlah Ahli Waris')
                            ->numeric()
                            ->hidden(fn (Get $get): bool => $get('id_tipe_surat') !== 'surat_keterangan_ahli_waris')
                            ->nullable(),
                        Textarea::make('daftar_ahli_waris')
                            ->label('Daftar Nama Ahli Waris (pisahkan dengan koma/enter)')
                            ->hidden(fn (Get $get): bool => $get('id_tipe_surat') !== 'surat_keterangan_ahli_waris')
                            ->nullable(),

                        // Khusus Domisili
                        DatePicker::make('domisili_sejak')
                            ->label('Domisili Sejak Tanggal')
                            ->hidden(fn (Get $get): bool => $get('id_tipe_surat') !== 'surat_keterangan_domisili')
                            ->nullable(),
                        Textarea::make('alamat_sebelumnya')
                            ->label('Alamat Sebelumnya')
                            ->hidden(fn (Get $get): bool => $get('id_tipe_surat') !== 'surat_keterangan_domisili')
                            ->nullable(),

                        // Khusus Kehilangan
                        TextInput::make('barang_hilang')
                            ->label('Barang yang Hilang')
                            ->hidden(fn (Get $get): bool => $get('id_tipe_surat') !== 'surat_keterangan_kehilangan')
                            ->nullable(),
                        DatePicker::make('tanggal_kehilangan')
                            ->label('Tanggal Kehilangan')
                            ->hidden(fn (Get $get): bool => $get('id_tipe_surat') !== 'surat_keterangan_kehilangan')
                            ->nullable(),
                        TextInput::make('tempat_kehilangan')
                            ->label('Tempat Kehilangan')
                            ->hidden(fn (Get $get): bool => $get('id_tipe_surat') !== 'surat_keterangan_kehilangan')
                            ->nullable(),
                        Textarea::make('kronologi_kehilangan')
                            ->label('Kronologi Kehilangan')
                            ->hidden(fn (Get $get): bool => $get('id_tipe_surat') !== 'surat_keterangan_kehilangan')
                            ->nullable(),

                        // Khusus Usaha
                        TextInput::make('nama_usaha')
                            ->label('Nama Usaha')
                            ->hidden(fn (Get $get): bool => $get('id_tipe_surat') !== 'surat_keterangan_usaha')
                            ->nullable(),
                        TextInput::make('jenis_usaha')
                            ->label('Jenis Usaha')
                            ->hidden(fn (Get $get): bool => $get('id_tipe_surat') !== 'surat_keterangan_usaha')
                            ->nullable(),
                        Textarea::make('alamat_usaha')
                            ->label('Alamat Usaha')
                            ->hidden(fn (Get $get): bool => $get('id_tipe_surat') !== 'surat_keterangan_usaha')
                            ->nullable(),
                        DatePicker::make('tahun_berdiri')
                            ->label('Tahun Berdiri')
                            ->hidden(fn (Get $get): bool => $get('id_tipe_surat') !== 'surat_keterangan_usaha')
                            ->nullable(),

                        // Khusus Pendatang
                        Textarea::make('asal_domisili')
                            ->label('Asal Domisili Sebelumnya')
                            ->hidden(fn (Get $get): bool => $get('id_tipe_surat') !== 'surat_pendatang')
                            ->nullable(),
                        DatePicker::make('tanggal_datang')
                            ->label('Tanggal Datang ke Desa Ini')
                            ->hidden(fn (Get $get): bool => $get('id_tipe_surat') !== 'surat_pendatang')
                            ->nullable(),
                        Textarea::make('tujuan_datang')
                            ->label('Tujuan Datang')
                            ->hidden(fn (Get $get): bool => $get('id_tipe_surat') !== 'surat_pendatang')
                            ->nullable(),

                        // Khusus SKTM
                        TextInput::make('penghasilan_per_bulan')
                            ->label('Penghasilan Per Bulan')
                            ->hidden(fn (Get $get): bool => $get('id_tipe_surat') !== 'surat_sktm')
                            ->nullable(),
                        TextInput::make('jumlah_tanggungan')
                            ->label('Jumlah Tanggungan Keluarga')
                            ->numeric()
                            ->hidden(fn (Get $get): bool => $get('id_tipe_surat') !== 'surat_sktm')
                            ->nullable(),
                        Textarea::make('kondisi_ekonomi')
                            ->label('Kondisi Ekonomi')
                            ->hidden(fn (Get $get): bool => $get('id_tipe_surat') !== 'surat_sktm')
                            ->nullable(),
                    ]),

                // Surat Pengantar Perkawinan
                Section::make('Informasi Pasangan & Pernikahan (Surat Pengantar Perkawinan)')
                    ->columns(2)
                    ->hidden(fn (Get $get): bool => $get('id_tipe_surat') !== 'surat_pengantar_perkawinan')
                    ->schema([
                        TextInput::make('nama_pasangan')->label('Nama Pasangan')->nullable(),
                        TextInput::make('nik_pasangan')->label('NIK Pasangan')->nullable(),
                        DatePicker::make('tanggal_lahir_pasangan')->label('Tanggal Lahir Pasangan')->nullable(),
                        TextInput::make('tempat_lahir_pasangan')->label('Tempat Lahir Pasangan')->nullable(),
                        TextInput::make('pekerjaan_pasangan')->label('Pekerjaan Pasangan')->nullable(),
                        TextInput::make('agama_pasangan')->label('Agama Pasangan')->nullable(),
                        Textarea::make('alamat_pasangan')->label('Alamat Pasangan')->columnSpanFull()->nullable(),
                        TextInput::make('status_perkawinan_pasangan')->label('Status Perkawinan Pasangan')->nullable(),
                        TextInput::make('nama_orang_tua_pasangan_ayah')->label('Nama Ayah Pasangan')->nullable(),
                        TextInput::make('nama_orang_tua_pasangan_ibu')->label('Nama Ibu Pasangan')->nullable(),
                        TextInput::make('tempat_akad_nikah')->label('Tempat Rencana Akad Nikah')->nullable(),
                        DatePicker::make('tanggal_akad_nikah')->label('Tanggal Rencana Akad Nikah')->nullable(),
                    ]),

                // Surat Pindah
                Section::make('Informasi Pindah (Surat Keterangan Pindah)')
                    ->columns(2)
                    ->hidden(fn (Get $get): bool => $get('id_tipe_surat') !== 'surat_pindah')
                    ->schema([
                        Textarea::make('alamat_tujuan_pindah')->label('Alamat Tujuan Pindah')->required()->columnSpanFull(),
                        TextInput::make('desa_tujuan_pindah')->label('Desa/Kel. Tujuan')->required(),
                        TextInput::make('kecamatan_tujuan_pindah')->label('Kecamatan Tujuan')->required(),
                        TextInput::make('kabupaten_tujuan_pindah')->label('Kabupaten/Kota Tujuan')->required(),
                        TextInput::make('provinsi_tujuan_pindah')->label('Provinsi Tujuan')->required(),
                        Textarea::make('alasan_pindah')->label('Alasan Pindah')->required()->columnSpanFull(),
                        TextInput::make('jumlah_keluarga_ikut_pindah')
                            ->label('Jumlah Keluarga yang Ikut Pindah')
                            ->numeric()
                            ->nullable(),
                        Textarea::make('daftar_keluarga_ikut_pindah')
                            ->label('Daftar Nama Keluarga yang Ikut Pindah (pisahkan dengan koma/enter)')
                            ->nullable()
                            ->columnSpanFull(),
                    ]),
            ]);
    }

    public static function table(Table $table): Table
    {
        return $table
            ->columns([
                TextColumn::make('id')->label('ID')->sortable()->searchable(),
                TextColumn::make('id_tipe_surat')
                    ->label('Jenis Surat')
                    ->formatStateUsing(fn (string $state): string => match ($state) {
                        'surat_kelahiran' => 'Surat Kelahiran',
                        'surat_kematian' => 'Surat Kematian',
                        'surat_keterangan_ahli_waris' => 'Surat Keterangan Ahli Waris',
                        'surat_keterangan_domisili' => 'Surat Keterangan Domisili',
                        'surat_keterangan_kehilangan' => 'Surat Keterangan Kehilangan',
                        'surat_keterangan_skck' => 'Surat Keterangan SKCK',
                        'surat_keterangan_usaha' => 'Surat Keterangan Usaha',
                        'surat_pendatang' => 'Surat Keterangan Pendatang',
                        'surat_pengantar_perkawinan' => 'Surat Pengantar Perkawinan',
                        'surat_permohonan' => 'Surat Permohonan',
                        'surat_pindah' => 'Surat Keterangan Pindah',
                        'surat_sktm' => 'Surat Keterangan Tidak Mampu (SKTM)',
                        default => $state,
                    })
                    ->sortable()
                    ->searchable(),
                TextColumn::make('nomor_surat')->label('Nomor Surat')->sortable()->searchable(),
                TextColumn::make('nama_lengkap')
                    ->label('Pemohon/Subjek')
                    ->description(fn (SuratUtama $record): ?string => match ($record->id_tipe_surat) {
                        'surat_kelahiran' => $record->nama_bayi,
                        'surat_kematian' => $record->nama_lengkap, // Nama almarhum
                        default => $record->nama_lengkap, // Umumnya pemohon
                    })
                    ->sortable()
                    ->searchable(),
                TextColumn::make('tanggal_pengajuan')->label('Tgl Pengajuan')->date()->sortable(),
                TextColumn::make('status')
                    ->label('Status')
                    ->badge()
                    ->color(fn (string $state): string => match ($state) {
                        'menunggu_acc_admin_desa' => 'warning',
                        'disetujui' => 'success',
                        'ditolak' => 'danger',
                        default => 'secondary',
                    })
                    ->sortable(),
                IconColumn::make('file_path')
                    ->label('File')
                    ->icon('heroicon-o-document')
                    ->url(fn (SuratUtama $record): ?string => $record->file_path ? Storage::url($record->file_path) : null)
                    ->openUrlInNewTab()
                    ->tooltip('Lihat File Surat'),
                    // ->visible(fn (SuratUtama $record): bool => (bool)$record->file_path),
                TextColumn::make('disetujuiOleh.name')->label('Disetujui Oleh')->sortable()->toggleable(isToggledHiddenByDefault: true),
                TextColumn::make('tanggal_disetujui')->label('Tgl Disetujui')->dateTime()->sortable()->toggleable(isToggledHiddenByDefault: true),
                TextColumn::make('created_at')->label('Dibuat Pada')->dateTime()->sortable()->toggleable(isToggledHiddenByDefault: true),
                TextColumn::make('updated_at')->label('Diperbarui Pada')->dateTime()->sortable()->toggleable(isToggledHiddenByDefault: true),
            ])
            ->filters([
                SelectFilter::make('id_tipe_surat')
                    ->label('Filter Jenis Surat')
                    ->options([
                        'surat_kelahiran' => 'Surat Kelahiran',
                        'surat_kematian' => 'Surat Kematian',
                        'surat_keterangan_ahli_waris' => 'Surat Keterangan Ahli Waris',
                        'surat_keterangan_domisili' => 'Surat Keterangan Domisili',
                        'surat_keterangan_kehilangan' => 'Surat Keterangan Kehilangan',
                        'surat_keterangan_skck' => 'Surat Keterangan SKCK',
                        'surat_keterangan_usaha' => 'Surat Keterangan Usaha',
                        'surat_pendatang' => 'Surat Keterangan Pendatang',
                        'surat_pengantar_perkawinan' => 'Surat Pengantar Perkawinan',
                        'surat_permohonan' => 'Surat Permohonan',
                        'surat_pindah' => 'Surat Keterangan Pindah',
                        'surat_sktm' => 'Surat Keterangan Tidak Mampu (SKTM)',
                    ]),
                SelectFilter::make('status')
                    ->label('Filter Status')
                    ->options([
                        'menunggu_acc_admin_desa' => 'Menunggu ACC Admin Desa',
                        'disetujui' => 'Disetujui',
                        'ditolak' => 'Ditolak',
                    ]),
                // Tables\Filters\TrashedFilter::make(),
            ])
            ->actions([
                Tables\Actions\ViewAction::make(),
                Tables\Actions\Action::make('setujui_surat')
                    ->label('Setujui & Unggah PDF')
                    ->icon('heroicon-o-check-circle')
                    ->color('success')
                    ->modalSubmitActionLabel('Unggah & Setujui')
                    ->form([
                        Forms\Components\TextInput::make('nomor_surat_acc')
                            ->label('Nomor Surat Resmi')
                            ->required()
                            ->unique('surat_utama', 'nomor_surat', ignoreRecord: true)
                            ->placeholder('Contoh: 470/SK.001/DS.RKJ/V/2025'),
                        Forms\Components\FileUpload::make('signed_pdf')
                            ->label('Unggah PDF Bertanda Tangan')
                            ->acceptedFileTypes(['application/pdf'])
                            ->directory('surat_utama')
                            ->required(),
                    ])
                    ->action(function (array $data, SuratUtama $record) {
                        DB::transaction(function () use ($data, $record) {
                            $record->update([
                                'status' => 'disetujui',
                                'nomor_surat' => $data['nomor_surat_acc'],
                                'file_path' => $data['signed_pdf'],
                                'disetujui_oleh' => Auth::id(),
                                'tanggal_disetujui' => now(),
                            ]);
                            Notification::make()
                                ->title('Surat berhasil disetujui.')
                                ->success()
                                ->send();
                        });
                    })
                    ->visible(fn (SuratUtama $record): bool => $record->status === 'menunggu_acc_admin_desa'),
                Tables\Actions\EditAction::make()->visible(fn (SuratUtama $record): bool => Auth::user()->role !== 'admin_dusun'),
                Tables\Actions\DeleteAction::make()->visible(fn (SuratUtama $record): bool => Auth::user()->role !== 'admin_dusun'),
            ])
            ->bulkActions([
                Tables\Actions\BulkActionGroup::make([
                    Tables\Actions\DeleteBulkAction::make(),
                    // Tables\Actions\ForceDeleteBulkAction::make(),
                    // Tables\Actions\RestoreBulkAction::make(),
                ]),
            ]);
    }

    public static function getRelations(): array
    {
        return [
            //
        ];
    }

    public static function getPages(): array
    {
        return [
            'index' => Pages\ListSuratUtamas::route('/'),
            'create' => Pages\CreateSuratUtama::route('/create'),
            'edit' => Pages\EditSuratUtama::route('/{record}/edit'),
        ];
    }

    public static function getEloquentQuery(): Builder
    {
        return parent::getEloquentQuery();
    }

}