<?php

namespace App\Livewire\Scss;

use App\Models\Products\Product;
use App\Models\Scss\ScssVersion;
use Livewire\Component;

class VersionEdit extends Component
{
    public Product $product;
    public ScssVersion $scssVersion;
    public string $version = '';
    public ?string $description = null;

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

    protected function rules()
    {
        return [
            'version' => [
                'required',
                'string',
                'regex:/^\d{10}$/',
                function ($attribute, $value, $fail) {
                    // Validar que no exista otra versión con el mismo producto y versión
                    if ($value !== $this->scssVersion->version) {
                        $exists = ScssVersion::where('product_id', $this->product->id)
                            ->where('version', $value)
                            ->where('id', '!=', $this->scssVersion->id)
                            ->exists();
                        if ($exists) {
                            $fail('Ya existe una versión con este número para este producto.');
                        }
                    }
                },
            ],
            'description' => [
                'nullable',
                'string',
                'max:1000',
            ],
        ];
    }

    protected function messages()
    {
        return [
            'version.required' => 'La versión es obligatoria.',
            'version.regex' => 'La versión debe tener el formato YYYYMMDDXX (10 dígitos).',
            'description.max' => 'La descripción no puede exceder 1000 caracteres.',
        ];
    }

    public function save()
    {
        $this->authorize('admin.scss.version.edit');
        
        $validated = $this->validate();

        $this->scssVersion->update([
            'version' => $validated['version'],
            'description' => $validated['description'],
            'updated_by' => auth()->id(),
        ]);

        session()->flash('success', 'Versión SCSS actualizada correctamente.');

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

    public function render()
    {
        return view('livewire.scss.version-edit', [
            'product' => $this->product,
        ])->layout('layouts.clean');
    }
}

