<?php

namespace Database\Factories;

use App\Models\Company;
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Facades\Hash;

class UserFactory extends Factory
{
    protected $model = User::class;

    /** Contador monotónico por proceso que garantiza correos únicos. */
    private static int $emailSeq = 0;

    public function definition()
    {
        return [
            'company_id' => Company::factory(),
            'name' => $this->faker->name(),
            // `faker->unique()->safeEmail()` NO basta: el registro de unicidad vive
            // en el Generator del contenedor, que se reconstruye en cada test, y el
            // pool de safeEmail() es finito. Con ~1.000 usuarios por corrida las
            // colisiones aparecen. El sufijo incremental las hace imposibles.
            'email' => $this->faker->userName().static::$emailSeq++.'@example.com',
            'password' => Hash::make('password'),
            // Celular colombiano limpio (10 dígitos). `faker->phoneNumber()` genera
            // formatos con extensiones/paréntesis ("x123", "(0)…") que NO pasan el
            // regex `->tel()` del UserForm → tests de edición que re-guardan un
            // usuario de factory fallaban de forma intermitente por el formato.
            'phone' => $this->faker->numerify('3#########'),

            // 🔥 IMPORTANTE:
            // NO incluir 'role' porque no existe en la tabla users.
            // Roles se asignan con spatie → $user->assignRole('admin')
        ];
    }
}
