<?php

namespace App\Livewire\Resources;

use App\Models\Resources\ResourceVersion;
use App\Models\Products\Product;
use Livewire\Component;

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

    public function mount(Product $product, ResourceVersion $resourceVersion)
    {
        $this->product = $product;
        $this->resourceVersion = $resourceVersion->load('product');
        
        // Verificar que la versión pertenezca al producto
        if ($this->resourceVersion->product_id !== $this->product->id) {
            abort(404, 'La versión de Recursos no pertenece a este producto.');
        }
        
        $this->version = $resourceVersion->version;
        $this->description = $resourceVersion->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->resourceVersion->version) {
                        $exists = ResourceVersion::where('product_id', $this->product->id)
                            ->where('version', $value)
                            ->where('id', '!=', $this->resourceVersion->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.resources.version.edit');
        
        $validated = $this->validate();

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

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

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

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

