<?php

namespace App\Livewire\Environments\Plugins;

use App\Models\Environments\Environment;
use App\Models\Environments\Plugin;
use Livewire\Component;
use Livewire\WithPagination;

class Index extends Component
{
    use WithPagination;

    public Environment $environment;

    public ?string $componentFilter = null;

    public bool $onlyOutdated = false;

    public function mount(Environment $environment): void
    {
        $this->environment = $environment;
    }

    public function updatedComponentFilter(): void
    {
        $this->resetPage();
    }

    public function updatedOnlyOutdated(): void
    {
        $this->resetPage();
    }

    public function getPluginsProperty()
    {
        return Plugin::where('environment_id', $this->environment->id)
            ->when($this->componentFilter !== null && $this->componentFilter !== '', function ($query) {
                $term = '%' . trim($this->componentFilter) . '%';
                $query->where('component', 'like', $term);
            })
            ->when($this->onlyOutdated, function ($query) {
                $query->where('has_updates', true);
            })
            ->orderBy('component')
            ->paginate(25);
    }

    public function openPluginModal(int $pluginId): void
    {
        $this->dispatch('openModal',
            component: \App\Livewire\Environments\Plugins\PluginDetailModal::class,
            arguments: [
                'pluginId' => $pluginId,
            ]
        );
    }

    public function render()
    {
        return view('livewire.environments.plugins.index', [
            'plugins' => $this->plugins,
        ])->layout('layouts.app');
    }
}

