<?php

namespace App\Livewire\Tutorials;

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

class Edit extends Component
{
    public Product $product;
    public TutorialVersion $tutorialVersion;
    public Tutorial $tutorial;
    public string $videoid = '';
    public string $platform = 'youtube';
    public string $title = '';
    public ?string $desc = null;
    public string $status = 'draft';
    public ?int $sort_order = null;

    public function mount(Product $product, TutorialVersion $tutorialVersion, Tutorial $tutorial)
    {
        $this->product = $product;
        $this->tutorialVersion = $tutorialVersion;
        $this->tutorial = $tutorial->load(['tutorialVersion.product', 'creator']);

        // 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.');
        }

        // Verificar que el tutorial pertenezca a la versión
        if ($this->tutorial->tutorial_version_id !== $this->tutorialVersion->id) {
            abort(404, 'El tutorial no pertenece a esta versión.');
        }

        $this->videoid = $tutorial->videoid;
        $this->platform = $tutorial->platform;
        $this->title = $tutorial->title;
        $this->desc = $tutorial->desc;
        $this->status = $tutorial->status;
        $this->sort_order = $tutorial->sort_order;
    }

    protected function rules()
    {
        return [
            'videoid' => 'required|string|max:255',
            'platform' => 'required|in:youtube,vimeo',
            'title' => 'required|string|max:255',
            'desc' => 'nullable|string|max:1000',
            'status' => 'required|in:draft,published,archived',
            'sort_order' => 'nullable|integer|min:0',
        ];
    }

    protected function messages()
    {
        return [
            'videoid.required' => 'El ID del vídeo es obligatorio.',
            'videoid.max' => 'El ID del vídeo no puede tener más de 255 caracteres.',
            'platform.required' => 'La plataforma es obligatoria.',
            'platform.in' => 'La plataforma debe ser youtube o vimeo.',
            'title.required' => 'El título es obligatorio.',
            'title.max' => 'El título no puede tener más de 255 caracteres.',
            'desc.max' => 'La descripción no puede tener más de 1000 caracteres.',
            'status.required' => 'El estado es obligatorio.',
            'status.in' => 'El estado debe ser draft, published o archived.',
            'sort_order.integer' => 'El orden debe ser un número entero.',
            'sort_order.min' => 'El orden debe ser mayor o igual a 0.',
        ];
    }

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

        // Actualizar tutorial
        $this->tutorial->update([
            'videoid' => $validated['videoid'],
            'platform' => $validated['platform'],
            'title' => $validated['title'],
            'desc' => $validated['desc'],
            'status' => $validated['status'],
            'sort_order' => $validated['sort_order'],
        ]);

        session()->flash('success', 'Tutorial actualizado correctamente.');

        // Redirigir a la vista de la versión
        return $this->redirect(route('products.tutorials.version.show', [$this->product, $this->tutorialVersion]), navigate: true);
    }

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


