<?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';
    }

    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();
    }

    public function render()
    {
        $bundles = $this->getVersionsQuery()->paginate(20);

        return view('livewire.scss-cdn.index', [
            'bundles' => $bundles,
            'product' => $this->product,
        ])->layout('layouts.app');
    }
}
