<?php

namespace App\Services\Api\Actions;

use App\Models\Tutorials\TutorialVersion;
use App\Models\Products\Product;
use App\Services\Api\Exceptions\TutorialsException;
use Illuminate\Http\Request;

class TutorialsAction implements ActionInterface
{
    /**
     * Ejecuta la acción tutorials para obtener tutoriales publicados de un producto
     *
     * @param Request $request
     * @param array $payload
     * @return array
     * @throws TutorialsException
     */
    public function execute(Request $request, array $payload): array
    {
        /** @var Product $validatedProduct */
        $validatedProduct = $request->input('_validated_product');

        if (!$validatedProduct) {
            throw new TutorialsException(
                'Product not validated',
                4000,
                401
            );
        }

        $version = $payload['version'] ?? '';

        // Validar que version tiene formato correcto (10 dígitos)
        if (!preg_match('/^\d{10}$/', $version)) {
            throw new TutorialsException(
                'Invalid version format. Expected YYYYMMDDXX format (10 digits)',
                4003,
                500
            );
        }

        // Buscar versión compatible de Tutoriales
        $tutorialVersion = TutorialVersion::findCompatibleVersion($validatedProduct, $version);

        if (!$tutorialVersion) {
            throw new TutorialsException(
                'No compatible tutorials version found for this product version',
                4002,
                404
            );
        }

        // Obtener tutoriales publicados de la versión encontrada, ordenados por sort_order
        $tutorials = $tutorialVersion->tutorials()
            ->published()
            ->ordered()
            ->get();

        // Formatear respuesta
        $data = $tutorials->map(function ($tutorial) {
            return [
                'title' => $tutorial->title,
                'desc' => $tutorial->desc,
                'platform' => $tutorial->platform,
                'videoid' => $tutorial->videoid,
                'video_url' => $tutorial->video_url,
                'embed_url' => $tutorial->embed_url,
                'sort_order' => $tutorial->sort_order,
                'updated_at' => $tutorial->updated_at->toIso8601String(),
            ];
        })->toArray();

        return $data;
    }
}








