<?php
namespace Database\Seeders;

use App\Models\Company;
use App\Models\User;
use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    public function run(): void
    {
        // 1. Empresas (debe ir PRIMERO porque otros seeders dependen de company_id)
        $this->call([
            CompanySeeder::class,
            RoleSeeder::class,
            ConfigurationSeeder::class,
        ]);

        // 2. Empresa operadora (Fycls)
        $fycls = Company::where('slug', 'fycls')->first();

        if (!$fycls) {
            $this->command->warn('Empresa Fycls no encontrada — saltando seeders de departamentos y usuarios.');
            return;
        }

        // 3. Setear empresa actual en sesión (para que DepartmentSeeder asigne correctamente)
        session(['current_company_id' => $fycls->id]);

        $this->call([
            DepartmentSeeder::class,
        ]);

        // 4. Usuarios iniciales
        // ── Superadmin Fycls (acceso total a todas las empresas) ──
        $superadmin = User::firstOrCreate(
            ['email' => 'admin@fycls.com'],
            [
                'company_id' => $fycls->id,
                'name'       => 'Administrador Fycls',
                'password'   => bcrypt('Admin2026*'),
                'is_active'  => true,
            ]
        );
        if (!$superadmin->company_id) {
            $superadmin->update(['company_id' => $fycls->id]);
        }
        $superadmin->syncRoles(['superadmin']);

        // ── Agente Fycls de prueba (atiende todas las empresas) ──
        $agente = User::firstOrCreate(
            ['email' => 'agente@fycls.com'],
            [
                'company_id' => $fycls->id,
                'name'       => 'Agente Soporte Fycls',
                'password'   => bcrypt('Admin2026*'),
                'is_active'  => true,
                'position'   => 'Técnico de Soporte',
            ]
        );
        if (!$agente->company_id) {
            $agente->update(['company_id' => $fycls->id]);
        }
        $agente->syncRoles(['agente']);

        // ── Usuarios finales de prueba (uno por cada empresa cliente) ──
        $clientes = Company::where('is_operator', false)->get();
        foreach ($clientes as $empresa) {
            $usuario = User::firstOrCreate(
                ['email' => "usuario@{$empresa->slug}.com"],
                [
                    'company_id' => $empresa->id,
                    'name'       => "Usuario Final {$empresa->name}",
                    'password'   => bcrypt('Admin2026*'),
                    'is_active'  => true,
                ]
            );
            if (!$usuario->company_id) {
                $usuario->update(['company_id' => $empresa->id]);
            }
            $usuario->syncRoles(['usuario']);
        }

        $this->command->info("✅ Seeding completado:");
        $this->command->info("   - {$clientes->count()} empresas cliente + 1 operador (Fycls)");
        $this->command->info("   - Login admin: admin@fycls.com / Admin2026*");
        $this->command->info("   - Login agente: agente@fycls.com / Admin2026*");
        $this->command->info("   - Login usuario final: usuario@fedef.com / Admin2026*");
    }
}
