<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Pagination\Paginator;
use Illuminate\Support\Facades\View;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth;

class AppServiceProvider extends ServiceProvider
{
    public function register(): void
    {
        //
    }

    public function boot(): void
    {
        Paginator::useBootstrapFive();

        View::composer('*', function ($view) {
            if (Auth::check()) {
                try {
                    $userId = Auth::id();
                    $userRole = Auth::user()->role;
                    
                    // Standardisasi status untuk query
                    $statusTunggu = ['menunggu', 'Menunggu', 'MENUNGGU'];
                    $statusSelesai = ['disetujui', 'ditolak', 'Disetujui', 'Ditolak', 'DISETUJUI', 'DITOLAK'];

                    // --- 1. LOGIKA ADMIN ---
                    // Mengambil total validasi dan pengajuan yang masuk (untuk lencana/badge admin)
                    $totalValidasi = DB::table('validasi')->whereIn('status', $statusTunggu)->count();
                    $totalSuratMasuk = DB::table('pengajuan_surat')->whereIn('status', $statusTunggu)->count();
                    
                    // Notifikasi untuk Admin (Surat yang perlu diproses)
                    $notifikasiAdmin = DB::table('pengajuan_surat')
                        ->select(
                            'id', 
                            'created_at', 
                            'jenis_surat as tipe', 
                            'jenis_surat as name', // FIX: Tambahkan ini agar $notif->name tidak error
                            'status', 
                            DB::raw("'pengajuan.index' as rute")
                        )
                        ->whereIn('status', $statusTunggu)
                        ->latest()
                        ->take(5)
                        ->get();

                    // --- 2. LOGIKA USER ---
                    // Notifikasi untuk User (Hasil dari pengajuan: Disetujui/Ditolak)
                    $notifikasiUser = DB::table('pengajuan_surat')
                        ->select(
                            'id', 
                            'created_at', 
                            'jenis_surat as tipe', 
                            'jenis_surat as name', // FIX: Tambahkan ini agar $notif->name tidak error
                            'status', 
                            DB::raw("'user.pengajuan.index' as rute")
                        )
                        ->where('user_id', $userId)
                        ->whereIn('status', $statusSelesai)
                        ->latest()
                        ->take(5)
                        ->get();

                    $totalNotifUser = DB::table('pengajuan_surat')
                        ->where('user_id', $userId)
                        ->whereIn('status', $statusSelesai)
                        ->count();

                    // Kirim data ke semua View
                    $view->with([
                        'totalMenungguSurat' => $totalValidasi + $totalSuratMasuk,
                        'notifikasiTerbaru'  => $notifikasiAdmin,
                        'notifikasiUser'     => $notifikasiUser,
                        'totalNotifUser'     => $totalNotifUser
                    ]);

                } catch (\Exception $e) {
                    // Fallback jika database belum migrasi atau error lainnya
                    $view->with([
                        'totalMenungguSurat' => 0,
                        'notifikasiTerbaru'  => collect([]),
                        'notifikasiUser'     => collect([]),
                        'totalNotifUser'     => 0
                    ]);
                }
            }
        });
    }
}