<?php

namespace App\Providers;

use Illuminate\Support\Facades\Event;
use Illuminate\Support\ServiceProvider;

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

    public function boot(): void
    {
        // CATATAN: Gate::before untuk super_admin DIHAPUS.
        //
        // Gate::before(fn => hasRole('super_admin') return true) menyebabkan
        // Spatie RoleMiddleware v6 berperilaku berbeda untuk super_admin vs admin:
        // - super_admin: Gate::before return true -> LOLOS
        // - admin: Gate::before return null -> Spatie cek Gate::allows('admin')
        //          -> tidak ada Gate definition -> GAGAL
        //
        // Akses super_admin ditangani di middleware EnsureAdminRole
        // dan di setiap @can/@canany di view via hasAnyRole() langsung.

        // ── Catat IP & User-Agent ke setiap activity log baru ──────────────
        // Dipasang sebagai event listener global (bukan mengubah satu pun
        // getActivitylogOptions() di model yang sudah ada) agar tidak
        // mengubah perilaku logging yang sudah berjalan — hanya menambah
        // dua properti baru ke 'properties' JSON setiap kali log dibuat.
        // Log lama (sebelum perubahan ini) TIDAK terdampak / tidak diisi mundur.
        \Illuminate\Support\Facades\Event::listen(
            \Spatie\Activitylog\Events\ActivityLogged::class,
            function (\Spatie\Activitylog\Events\ActivityLogged $event) {
                $request = request();

                $event->activity->properties = $event->activity->properties->merge([
                    'ip_address' => $request->ip(),
                    'user_agent' => $request->userAgent(),
                ]);
                $event->activity->saveQuietly();
            }
        );

        // ── Catat waktu login terakhir ──────────────────────────────────────
        // Dipasang sebagai event listener global (bukan mengubah
        // AuthController::login() atau LoginRequest::authenticate() yang
        // sudah berjalan) agar business logic login tidak tersentuh sama
        // sekali. Laravel otomatis fire event ini setiap Auth::attempt()
        // berhasil, untuk SEMUA guard (admin & customer).
        \Illuminate\Support\Facades\Event::listen(
            \Illuminate\Auth\Events\Login::class,
            function (\Illuminate\Auth\Events\Login $event) {
                $event->user->forceFill(['last_login_at' => now()])->saveQuietly();
            }
        );

        // ── Telegram notification ditangani otomatis via Laravel auto-discovery ──
        // SendTelegramOrderNotification sudah ter-register via type-hint handle(OrderPlaced).
        // Jangan tambahkan Event::listen manual di sini — akan menyebabkan double notifikasi.
    }
}
