<?php

namespace App\Console\Commands;

use App\Models\Company;
use App\Models\User;
use Illuminate\Console\Command;

/**
 * Fija una contraseña conocida en los usuarios de la empresa demo para permitir
 * el login en los tests E2E (Playwright). Las contraseñas demo reales son
 * aleatorias y rotan a diario, así que no sirven para automatizar.
 *
 * BLINDADO a no-producción: aborta salvo en `local`/`testing`. Nunca cambia
 * contraseñas en prod.
 */
class PrepareE2eLogin extends Command
{
    protected $signature = 'credify:e2e-prepare {--password=e2e-demo-pass}';

    protected $description = 'Fija una contraseña conocida en los usuarios demo para tests E2E (solo local/testing).';

    public function handle(): int
    {
        if (! app()->environment(['local', 'testing'])) {
            $this->error('credify:e2e-prepare solo corre en local/testing (env actual: '.app()->environment().').');

            return self::FAILURE;
        }

        $password = (string) $this->option('password');

        $company = Company::withoutGlobalScopes()->where('is_demo', true)->first();
        if ($company === null) {
            $this->error('No existe la empresa demo. Corre `php artisan credify:setup-demo` primero.');

            return self::FAILURE;
        }

        $users = User::withoutGlobalScopes()->where('company_id', $company->id)->get();
        $out = [];
        foreach ($users as $user) {
            $user->password = $password; // cast 'hashed' → hashea al guardar
            $user->save();
            $out[] = [
                'role' => $user->getRoleNames()->first(),
                'email' => $user->email,
                'password' => $password,
            ];
        }

        $this->line(json_encode($out));

        return self::SUCCESS;
    }
}
