<?php

namespace App\Livewire\Tutorials;

use App\Models\Tutorials\TutorialVersion;
use App\Models\Products\Product;
use Livewire\Component;

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

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

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

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

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

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


