<?php

namespace App\Livewire\Scss;

use App\Models\Products\Product;
use App\Models\Scss\ScssFile;
use App\Models\Scss\ScssVersion;
use App\Services\Scss\ScssStorageService;
use Livewire\Component;

class VersionShow extends Component
{
    public Product $product;
    public ScssVersion $scssVersion;

    public function mount(Product $product, ScssVersion $scssVersion)
    {
        $this->product = $product;
        $this->scssVersion = $scssVersion->load('files', 'product', 'creator');
    }

    public function delete($fileId)
    {
        $this->authorize('admin.scss.file.destroy');
        
        $file = ScssFile::findOrFail($fileId);

        // Verificar que el archivo pertenece a esta versión
        if ($file->scss_version_id !== $this->scssVersion->id) {
            session()->flash('error', 'El archivo no pertenece a esta versión.');
            return;
        }

        // Eliminar archivo físico
        $product = $this->product ?? $this->scssVersion->product;
        ScssStorageService::deleteFile(
            $product,
            $this->scssVersion,
            $file->filename
        );

        // Eliminar de BD
        $file->delete();

        session()->flash('success', 'Archivo eliminado exitosamente.');

        // Recargar versión
        $this->scssVersion->refresh();
    }

    public function duplicateVersion()
    {
        $this->authorize('admin.scss.version.create');
        
        $newVersion = $this->scssVersion->duplicate();

        session()->flash('success', "Versión duplicada exitosamente. Nueva versión: {$newVersion->version}");

        return redirect()->route('products.scss.version.show', [$this->product, $newVersion]);
    }

    public function render()
    {
        $files = $this->scssVersion->files()->orderBy('filename')->get();

        return view('livewire.scss.version-show', [
            'files' => $files,
        ])->layout('layouts.app');
    }
}

