<?php

namespace App\Livewire\Users;

use App\Models\Auth\User;
use Illuminate\Support\Facades\DB;
use Livewire\Component;
use Livewire\WithPagination;

class Index extends Component
{
    use WithPagination;

    public string $search = '';

    protected $queryString = ['search'];

    public function updatingSearch()
    {
        $this->resetPage();
    }

    public function delete($id)
    {
        $this->authorize('admin.users.destroy');
        
        $user = User::findOrFail($id);

        if (!$user->is_deletable()) {
            session()->flash('error', 'Este usuario no se puede borrar porque es un administrador.');
            return;
        }

        $name = $user->name;
        $email = $user->email;

        $user->delete();

        session()->flash('success', "El usuario \"$name\" ($email) se eliminó con éxito.");
    }

    public function render()
    {
        $users = User::query()
            ->addSelect([
                'last_activity_at' => DB::table('sessions')
                    ->selectRaw('MAX(last_activity)')
                    ->whereColumn('sessions.user_id', 'users.id'),
            ])
            ->when($this->search, function ($q) {
                $q->where('name', 'like', "%{$this->search}%")
                    ->orWhere('email', 'like', "%{$this->search}%");
            })
            ->orderBy('id', 'asc')
            ->paginate(10);

        return view('livewire.users.index', [
            'users' => $users,
        ])->layout('layouts.app');
    }
}

