<?php

namespace Database\Seeders;

use App\Models\User;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;

class AdminUserSeeder extends Seeder
{
    public function run(): void
    {
        // Tüm izinleri oluştur
        $permissions = [
            'view dashboard',
            'view job postings',
            'create job postings',
            'edit job postings',
            'delete job postings',
            'publish job postings',
            'view applications',
            'edit application status',
            'add application notes',
            'export applications',
            'view interviews',
            'create interviews',
            'edit interviews',
            'delete interviews',
            'view departments',
            'create departments',
            'edit departments',
            'delete departments',
            'view users',
            'create users',
            'edit users',
            'delete users',
            'view settings',
            'edit settings',
            'view site settings',
            // Site Ayarları — sekme bazında granüler izinler
            'manage general settings',
            'manage google calendar settings',
            'manage virustotal settings',
            'manage system settings',
            'manage kvkk settings',
            'view logs',
            'view reports',
        ];

        foreach ($permissions as $permission) {
            Permission::firstOrCreate(['name' => $permission, 'guard_name' => 'web']);
        }

        // super-admin rolü oluştur
        $superAdminRole = Role::firstOrCreate(['name' => 'super-admin', 'guard_name' => 'web']);
        $superAdminRole->syncPermissions(Permission::all());

        // admin rolü oluştur
        $adminRole = Role::firstOrCreate(['name' => 'admin', 'guard_name' => 'web']);
        $adminRole->syncPermissions(Permission::all());

        // Admin kullanıcısı oluştur
        // Şifre: ADMIN_PASSWORD env değişkeninden okunur, yoksa rastgele üretilir
        $password = env('ADMIN_PASSWORD');
        $generated = false;

        if (empty($password)) {
            $password = \Illuminate\Support\Str::random(16) . '!A1';
            $generated = true;
        }

        $user = User::firstOrCreate(
            ['email' => 'admin@markamama.com'],
            [
                'name'              => 'Admin',
                'password'          => Hash::make($password),
                'email_verified_at' => now(),
            ]
        );

        $user->assignRole('super-admin');

        $this->command->info('Admin kullanıcısı oluşturuldu:');
        $this->command->info('  E-posta : admin@markamama.com');
        if ($generated) {
            $this->command->warn('  Şifre   : ' . $password . ' (rastgele üretildi — hemen değiştirin!)');
        } else {
            $this->command->info('  Şifre   : ADMIN_PASSWORD env değişkeninden alındı.');
        }
        $this->command->info('  Rol     : super-admin');
        $this->command->warn('  ÖNEMLİ : Admin paneline giriş yaptıktan sonra şifrenizi hemen değiştirin!');
    }
}