<?php

namespace App\Livewire\Users;

use App\Models\Auth\User;
use App\Models\Monitoring\Log;
use Livewire\Component;
use Spatie\Permission\Models\Role;

class Create extends Component
{
    public string $name = '';
    public string $email = '';
    public string $password = '';
    public string $password_confirmation = '';
    public string $role = '';

    protected function rules()
    {
        return [
            'name' => 'required',
            'email' => 'required|email|unique:users,email',
            'password' => 'required|confirmed|min:8',
            'role' => 'required|string|exists:roles,name',
        ];
    }

    public function save()
    {
        $this->authorize('admin.users.create');
        
        $validated = $this->validate();

        try {
            $user = User::create([
                'name' => $validated['name'],
                'email' => $validated['email'],
                'password' => bcrypt($validated['password']),
            ]);

            $user->syncRoles([$validated['role']]);

            session()->flash('success', 'Usuario creado correctamente.');

            return $this->redirect(route('users.edit', $user), navigate: true);

        } catch (\Exception $e) {
            Log::db('danger', '15001', 'User Create', 'User', null, $e->getMessage());
            session()->flash('error', 'El usuario NO SE HA PODIDO CREAR');
        }
    }

    public function render()
    {
        return view('livewire.users.create', [
            'availableRoles' => Role::all(),
        ])->layout('layouts.clean');
    }
}

