<?php

namespace App\Models\Products;

use App\Models\Auth\User;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

/**
 * Lo que se fija a mano en la ficha de un plugin: si es de terceros (o estándar) cuando el
 * inventario no lo sabe, y la página buena del Marketplace.
 *
 * **No es el catálogo de plugins propios.** Que un plugin sea nuestro va en `OwnPlugin`, que
 * es lo que leen el resto de pantallas. Aquí solo lo que no tenía sitio.
 */
class PluginFicha extends Model
{
    public const TERCEROS = 'terceros';

    public const ESTANDAR = 'estandar';

    /** Las clasificaciones que se pueden fijar a mano. */
    public const CLASIFICACIONES = [self::TERCEROS, self::ESTANDAR];

    /** Los dominios que se aceptan como página del Marketplace. */
    public const DOMINIOS_DEL_MARKETPLACE = ['moodle.org', 'marketplace.moodle.com'];

    protected $table = 'plugin_fichas';

    protected $fillable = [
        'component',
        'clasificacion',
        'marketplace_url',
        'updated_by',
    ];

    public function updatedBy(): BelongsTo
    {
        return $this->belongsTo(User::class, 'updated_by');
    }

    /**
     * ¿Es una página del Marketplace que se pueda enlazar?
     *
     * Solo `https://` y solo los dominios del directorio: se pinta como enlace. La usan la
     * validación del formulario y la URL que manda el Moodle de cada sitio, para que las dos
     * sigan la misma regla.
     */
    public static function esDelMarketplace(?string $url): bool
    {
        $url = trim((string) $url);
        $host = strtolower((string) parse_url($url, PHP_URL_HOST));

        return str_starts_with($url, 'https://') && in_array($host, self::DOMINIOS_DEL_MARKETPLACE, true);
    }
}
