<?php

namespace Database\Seeders;

use App\Models\Company;
use App\Models\Subscription;
use App\Models\User;
use Carbon\Carbon;
use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Role; // Importar Carbon para manejar fechas

class InitialSetupSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        // 1. CREACIÓN DE ROLES (Spatie)
        $roles = [
            'super_admin' => 'Super Administrador Global',
            'admin' => 'Administrador de Compañía',
            'supervisor' => 'Supervisor',
            'collector' => 'Cobrador',
            'client' => 'Cliente',
        ];

        foreach ($roles as $name => $description) {
            Role::firstOrCreate(['name' => $name]);
        }

        // 2. CREACIÓN DEL SUPER ADMIN GLOBAL (Sin company_id)
        $superAdmin = User::firstOrCreate(
            ['email' => 'super@credifygo.com'],
            [
                'name' => 'Super Administrador',
                'password' => bcrypt('password'),
            ]
        );
        $superAdmin->assignRole('super_admin');

        // 3. CREACIÓN DE LA COMPAÑÍA "J&A Asociados"
        $companyName = 'J&A Asociados';
        $companyEmail = 'contacto@jyasociados.com'; // Puedes ajustar el email
        $company = Company::firstOrCreate(
            ['name' => $companyName],
            ['email' => $companyEmail]
        );

        // 4. CREACIÓN DE LA SUSCRIPCIÓN PARA "J&A Asociados"
        Subscription::firstOrCreate(
            ['company_id' => $company->id],
            [
                'billing_cycle' => 'annual',
                'starts_at' => now()->startOfDay(),
                'ends_at' => now()->addYears(74)->endOfYear(),
                'status' => 'active',
                'is_active' => true,
            ]
        );

        // 5. CREACIÓN DE USUARIOS PARA "J&A Asociados"
        $companyUsers = [
            'admin' => 'Admin J&A',
            'supervisor' => 'Supervisor J&A',
            'collector' => 'Collector J&A',
        ];

        foreach ($companyUsers as $roleName => $userName) {
            $user = User::firstOrCreate(
                [
                    // Genera un email único basado en rol y nombre de compañía simplificado
                    'email' => strtolower($roleName).'@'.strtolower(str_replace(['&', ' '], '', $companyName)).'.com',
                ],
                [
                    'name' => $userName,
                    'company_id' => $company->id,
                    'password' => bcrypt('password'), // Contraseña universal para testing
                ]
            );
            $user->assignRole($roleName);
        }

        $this->command->info('Seeder ejecutado: Super Admin y Compañía J&A Asociados creados.');
    }
}
