<?php

namespace App\Livewire\Admin\User;

use App\Livewire\Forms\UserForm;
use App\Models\User;
use Livewire\Component;
use Livewire\Attributes\On;
use App\Services\UserService;
use Illuminate\Support\Facades\Auth;

class EditUser extends Component
{


    public UserService $userService;
    public User $user;
    public UserForm $userForm;
    #[On('update-user')]
    public function loadUser($id)
    {
        try {
            $this->user = User::find($id);


            if ($this->user) {
                $this->userForm->editUser($this->user);
            }
        } catch (\Exception $e) {
            $this->dispatch('notify', message: 'Ocorreu um erro inesperado ao editar o usuário. ' . $e);
        }
    }
    public function editUser(UserService $userService)
    {

        try {
            $this->authorize('editUser', Auth::user());
            $data = $this->userForm->validate();

            if (!$userService->updateUser($this->user, $data)) {
                throw new \Exception('O serviço não confirmou a atualização.');
            }

            $this->dispatch('user-updated');
            $this->dispatch('notify', message: $this->userForm->name . ' atualizado com sucesso!');
            $this->userForm->reset();
        } catch (\Exception $e) {
            $this->dispatch('notify', message: 'Falha na edição: ' . $e->getMessage(), type: 'error');
            // $this->addError('general', $e->getMessage());
        }
    }
    public function render()
    {
        return view('livewire.admin.users.edit-user');
    }
}
