<?php

namespace App\Livewire\Plugins;

use Illuminate\Support\Collection;
use Livewire\Attributes\Url;

/**
 * Plugins Tresipunt: qué versión de lo nuestro tiene cada cliente.
 *
 * **La pregunta que justifica la sección.** El agregado del inventario agrupaba por
 * componente sin mirar la versión, así que un plugin en la 1.8 en un cliente y en la 2.1
 * en otro se veía igual que uno homogéneo — y eso es justo el dato con el que se planifica
 * una actualización.
 *
 * Es la única pantalla que pide el **detalle por entorno** de cada versión: las demás se
 * apañan con los recuentos, y traer el detalle cuesta una consulta por componente.
 */
class Nuestros extends PantallaDelParque
{
    /** Todos, los desalineados, los que tienen actualización o los que faltan en algún sitio. */
    #[Url(as: 'ver', except: '')]
    public string $focoNuestros = '';

    public function nuestrosFiltrados(): array
    {
        return collect($this->nuestros())
            ->when($this->focoNuestros === 'desalineados', fn (Collection $c) => $c->where('versiones', '>', 1))
            ->when($this->focoNuestros === 'actualizables', fn (Collection $c) => $c->where('actualizables', '>', 0))
            ->when($this->focoNuestros === 'ausentes', fn (Collection $c) => $c->where('entornos', '<', $this->cobertura()['envian']))
            ->values()
            ->all();
    }

    /**
     * El resumen de la pestaña de los nuestros, **sin filtrar**.
     *
     * @return array{desalineados:int, actualizables:int, ausentes:int}
     */

    protected function quiereElDetalleDeVersiones(): bool
    {
        return true;
    }

    public function limpiarFiltros(): void
    {
        parent::limpiarFiltros();

        $this->focoNuestros = '';
        $this->abierto = null;
    }

    public function render()
    {
        return view('livewire.plugins.nuestros', array_merge($this->comunes(), [
            'nuestros' => $this->nuestrosFiltrados(),
            'resumenNuestros' => $this->resumenNuestros(),
            'detalle' => $this->detalleAbierto(),
            'hayFiltro' => $this->focoNuestros !== '' || $this->incluirApagados,
        ]))->layout('layouts.app');
    }
}
