<?php

namespace App\Domains\Catalog\Resources;

use App\Domains\Catalog\Models\CatalogItem;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;

/** @mixin CatalogItem */
class CatalogItemResource extends JsonResource
{
    /** @return array<string, mixed> */
    public function toArray(Request $request): array
    {
        return [
            'id' => $this->id,
            'type' => $this->type->value,
            'category_id' => $this->category_id,
            'brand_id' => $this->brand_id,
            'slug' => $this->slug,
            'nombre' => $this->nombre,
            'descripcion' => $this->descripcion,
            'precio' => $this->precio,
            'inventory_policy' => $this->inventory_policy?->value,
            'has_tickets' => $this->has_tickets,
            'minimum_use_date' => $this->minimum_use_date,
            'maximum_use_date' => $this->maximum_use_date,
            'real_stock' => $this->whenLoaded('inventory', fn () => $this->inventory?->real_stock),
            'images' => $this->whenLoaded('attachments', fn () => $this->attachments
                ->map(fn ($attachment) => $attachment->getTemporaryUrl(1440))
                ->values()),
            'variants' => $this->whenLoaded('variants', fn () => $this->variants
                ->map(fn ($variant) => [
                    'id' => $variant->id,
                    'real_stock' => $variant->inventory?->real_stock,
                    'values' => $variant->definitions
                        ->mapWithKeys(fn ($definition) => [
                            $definition->itemAttribute?->attribute?->codigo => $definition->value,
                        ])
                        ->filter(fn ($value, $key) => $key !== null),
                    'images' => $variant->attachments
                        ->map(fn ($attachment) => $attachment->getTemporaryUrl(1440))
                        ->values(),
                ])
                ->values()),
        ];
    }
}
