<?php

namespace App\Livewire\Plugins;

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

/**
 * Versiones de Moodle: qué sitios están por debajo de su rama y cuáles de la mayor.
 *
 * **Lo recuperó del Manager antiguo**, que tenía `/admin/updates/{id}` con las versiones de
 * core disponibles y su enlace de descarga. Las versiones completas no llegan hoy —ver el
 * brief `plugins-del-parque.md` §3—, pero con los dos escalares que sí manda cada sitio
 * (`lastversion` y `lastminor`) ya se puede decir quién se ha quedado atrás, y eso no
 * necesitaba ningún dato nuevo.
 */
class Core extends PantallaDelParque
{
    /** Por lo que le falta a cada sitio: al día, menor o mayor. */
    #[Url(as: 'estado', except: '')]
    public string $focoCore = '';

    public function coreFiltrado(): array
    {
        $termino = mb_strtolower(trim($this->busqueda));

        return collect($this->core())
            ->when($this->focoCore !== '', fn (Collection $c) => $c->where('estado', $this->focoCore))
            ->when($termino !== '', fn (Collection $c) => $c->filter(
                fn (array $s) => str_contains(mb_strtolower($s['entorno']->name), $termino)
                    || str_contains(mb_strtolower((string) $s['entorno']->domain), $termino)
            ))
            ->values()
            ->all();
    }


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

        $this->focoCore = '';
    }

    public function render()
    {
        return view('livewire.plugins.core', array_merge($this->comunes(), [
            'core' => $this->coreFiltrado(),
            'resumenCore' => $this->resumenCore(),
            'ramas' => $this->ramas(),
            'sinComprobar' => count($this->sinComprobar()),
            'hayFiltro' => $this->busqueda !== '' || $this->focoCore !== '' || $this->incluirApagados,
        ]))->layout('layouts.app');
    }
}
