<?php

namespace App\Livewire\Admin\User;

use App\Services\UserService;
use Illuminate\Support\Facades\Auth;
use Livewire\Component;

class CreateUser extends Component
{
    public string $name = '';
    public string $email = '';
    public string $password = '';
    public string $password_confirm = '';
    public string $permissions = '';

    protected $rules = [
        'name' => 'required|string|max:255',
        'email' => 'required|email|unique:users,email',
        'password' => 'required|string|min:8',
        'password_confirm' => 'required|string|same:password',
        'permissions' => 'required|string|in:user,admin'
    ];

    protected $messages = [
        'name' => 'Nome precisa ser informado.',
        'email' => 'O email precisa ser informado.',
        'email.unique' => 'O email informado já foi cadastrado anteriormente.',
        'password' => 'A senha precisa ter 8 ou mais caracteres.',
        'password_confirm' => 'As senhas não coincidem.',
        'permissions' => 'Escolha o nível de autorização do usuário.'
    ];

    public function createUser(UserService $userService)
    {

        try {
            $this->authorize('createUser', Auth::user());
            $validated = $this->validate($this->rules, $this->messages);

            $user = $userService->createUser($validated);


            $this->reset();

            $this->dispatch('user-created');

            $this->dispatch('notify', message: 'Usuário cadastrado com sucesso!');
        } catch (\Exception $e) {
            $this->addError('general', $e->getMessage());
            $this->dispatch('notify', message: 'Ocorreu um erro ao criar o usuário. ' . $e->getMessage(), type: 'error');
        }
    }

    public function render()
    {
        return view('livewire.admin.users.create-user');
    }
}
