<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;

class RolesAndPermissionsSeeder extends Seeder
{
    public function run(): void
    {
        app()[\Spatie\Permission\PermissionRegistrar::class]->forgetCachedPermissions();

        $permissions = [
            // Dashboard tabs
            'dashboard.view.pertek',
            'dashboard.view.rintek',
            'dashboard.view.amdal',
            'dashboard.view.izin_angkut',
            'dashboard.view.uji_emisi',

            // Menus
            'pengumuman.access',
            'penjadwalan.access',
            'persetujuan_teknis.access',
            'rincian_teknis.access',
            'persetujuan_lingkungan.access',
            'izin_angkut_olah.access',
            'izin_tempat_uji_emisi.access',

            // Management
            'settings.manage',
            'content.manage',
            'master_data.manage',
        ];

        foreach ($permissions as $perm) {
            Permission::firstOrCreate(['name' => $perm]);
        }

        // Roles
        $kadis = Role::firstOrCreate(['name' => 'Kadis']);
        $ppkl  = Role::firstOrCreate(['name' => 'PPKL']);
        $dlh   = Role::firstOrCreate(['name' => 'DLH']);
        $perusahaan = Role::firstOrCreate(['name' => 'Perusahaan']);

          // Kadis permissions (semua dashboard tabs + modules, tanpa pengaturan/konten/master data)
        $perusahaanPerms = [
            'dashboard.view.pertek',
            'dashboard.view.rintek',
            'dashboard.view.amdal',
            'dashboard.view.izin_angkut',
            'dashboard.view.uji_emisi',
            'pengumuman.access',
            'penjadwalan.access',
            'persetujuan_teknis.access',
            'rincian_teknis.access',
            'persetujuan_lingkungan.access',
            'izin_angkut_olah.access',
            'izin_tempat_uji_emisi.access',
        ];
        $perusahaan->syncPermissions($perusahaanPerms);

        // Kadis permissions (semua dashboard tabs + modules, tanpa pengaturan/konten/master data)
        $kadisPerms = [
            'dashboard.view.pertek',
            'dashboard.view.rintek',
            'dashboard.view.amdal',
            'dashboard.view.izin_angkut',
            'dashboard.view.uji_emisi',
            'penjadwalan.access',
            'persetujuan_teknis.access',
            'rincian_teknis.access',
            'persetujuan_lingkungan.access',
            'izin_angkut_olah.access',
            'izin_tempat_uji_emisi.access',
        ];
        $kadis->syncPermissions($kadisPerms);

        // PPKL permissions (dashboard pertek + penjadwalan + persetujuan teknis)
        $ppklPerms = [
            'dashboard.view.pertek',
            'penjadwalan.access',
            'persetujuan_teknis.access',
        ];
        $ppkl->syncPermissions($ppklPerms);

        // DLH (super admin) -> assign all permissions
        $dlh->syncPermissions(Permission::all());

        app()[\Spatie\Permission\PermissionRegistrar::class]->forgetCachedPermissions();
    }
}
