<?php

namespace App\Console\Commands;

use App\Models\AdminUser;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rules\Password;

class CreateAdmin extends Command
{
    protected $signature = 'admin:create {email? : Administrator email address} {--name= : Administrator full name}';

    protected $description = 'Create a System Admin account for the Desxpert administration portal';

    public function handle(): int
    {
        $email = strtolower(trim((string) ($this->argument('email') ?: $this->ask('Email address'))));
        $name = trim((string) ($this->option('name') ?: $this->ask('Full name')));
        $password = (string) $this->secret('Password (minimum 12 characters)');
        $confirmation = (string) $this->secret('Confirm password');

        $validator = Validator::make(
            compact('email', 'name', 'password', 'confirmation'),
            [
                'email' => ['required', 'email'],
                'name' => ['required', 'string', 'max:150'],
                'password' => ['required', Password::min(12)->mixedCase()->numbers()],
                'confirmation' => ['same:password'],
            ],
        );

        if ($validator->fails()) {
            foreach ($validator->errors()->all() as $error) {
                $this->error($error);
            }

            return self::FAILURE;
        }

        if (AdminUser::where('email', $email)->exists()) {
            $this->error('An administrator with this email address already exists.');

            return self::FAILURE;
        }

        AdminUser::create([
            'name' => $name,
            'email' => $email,
            'password' => $password,
            'role' => 'system_admin',
            'status' => 'active',
        ]);

        $this->newLine();
        $this->info("System Admin created successfully: {$email}");
        $this->line('You can now sign in at '.route('login'));

        return self::SUCCESS;
    }
}
