<?php

namespace App\Http\Livewire\Projects;

use App\Actions\Projects\DeleteProject;
use App\Traits\HasToast;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Illuminate\Validation\ValidationException;
use Livewire\Component;

class ProjectsList extends Component
{
    use HasToast;
    use RefreshComponentOnBroadcast;

    protected $listeners = [
        '$refresh',
    ];

    public int $deleteId;

    public function delete(): void
    {
        try {
            app(DeleteProject::class)->delete(auth()->user(), $this->deleteId);

            $this->redirect(route('projects'));

            return;
        } catch (ValidationException $e) {
            $this->toast()->error($e->getMessage());
        }
    }

    public function render(): View
    {
        return view('livewire.projects.projects-list', [
            'projects' => auth()->user()->projects()->orderByDesc('id')->get(),
        ]);
    }
}