<?php

namespace App\Services\Api\Actions;

use App\Models\Products\LicenseToken;
use App\Models\Environments\Environment;
use Illuminate\Http\Request;

class ProductsAction implements ActionInterface
{
    public function execute(Request $request, array $payload): array
    {
        /** @var LicenseToken $licenseToken */
        $licenseToken = $request->input('_license_token');

        /** @var Environment $environment */
        $environment = $request->input('_environment');

        $now = now();

        // Obtener todos los productos activos asociados al token con sus fechas del pivot
        $productsWithPivot = $licenseToken->products()
            ->wherePivot('status', 'active')
            ->where(function ($query) use ($now) {
                $query->whereNull('license_token_product.start_at')
                    ->orWhere('license_token_product.start_at', '<=', $now);
            })
            ->where(function ($query) use ($now) {
                $query->whereNull('license_token_product.end_at')
                    ->orWhere('license_token_product.end_at', '>=', $now);
            })
            ->get();

        // Extraer solo los slugs de los productos autorizados
        $products = $productsWithPivot->pluck('slug')->toArray();

        // Construir respuesta según especificación
        return [
            'products' => $products,
            'environmentid' => $environment->id,
            'support_active' => $environment->has_support,
            'warnings' => [],
        ];
    }
}

