<?php

namespace App\Livewire\ScssCdn;

use App\Models\Products\Product;
use App\Models\ScssCdn\ScssCdnBundle;
use App\Livewire\Traits\HasVersionIndex;
use Livewire\Component;
use Illuminate\Database\Eloquent\Model;

class Index extends Component
{
    use HasVersionIndex;

    protected function getVersionModel(): string
    {
        return ScssCdnBundle::class;
    }

    protected function getCountRelation(): string
    {
        return 'files';
    }

    protected function getCreateSuccessMessage(string $version): string
    {
        return "Nuevo bundle SCSS CDN creado: {$version}";
    }

    protected function getVersionShowRoute(Product $product, Model $version): string
    {
        return route('products.scss-cdn.bundle.show', [$product, $version]);
    }

    protected function getDuplicateParameterName(): string
    {
        return 'bundleId';
    }

    protected function getVersionWritePermission(): string
    {
        return 'admin.scss-cdn.create';
    }

    public function duplicate($bundleId)
    {
        try {
            $bundle = ScssCdnBundle::with('files')->findOrFail($bundleId);
            $newBundle = $bundle->duplicate();
            session()->flash('success', "Bundle duplicado correctamente. Nueva versión: {$newBundle->version}");
        } catch (\Exception $e) {
            session()->flash('error', 'Error al duplicar el bundle: ' . $e->getMessage());
        }
    }

    public function createNewBundle()
    {
        return $this->createNewVersion();
    }

    /**
     * Los textos y las rutas que distinguen esta pantalla de las otras cinco.
     *
     * Ver el docblock de `HasVersionIndex::ficha()`: la vista es una sola y esto es
     * lo único que cambia entre los seis tipos de contenido.
     */
    protected function ficha(): array
    {
        return [
            'clave' => 'scss-cdn',
            'elemento' => 'archivo',
            'elementos' => 'archivos',
            'rutaVer' => 'products.scss-cdn.bundle.show',
            'rutaEditar' => 'products.scss-cdn.bundle.edit',
            'explicacion' => 'Paquetes de estilos que se sirven desde CDN en vez de compilarse en la plataforma del cliente. Cada archivo servible tiene su token y su URL propia; los internos solo se importan desde los otros y no se exponen.',
        ];
    }
}
