<?php

namespace App\Http\Resources\V1;

use Illuminate\Http\Resources\Json\JsonResource;

class ImageResource extends JsonResource
{
    /**
     * Output sizes
     *
     * @var array
     */
    private $sizes = [];

    /**
     * Create a new resource instance.
     *
     * @param  mixed  $resource
     * @return void
     */
    public function __construct($resource, $sizes = null)
    {
        // Ensure you call the parent constructor
        parent::__construct($resource);
        $this->resource = $resource;
        $configSizes = config('image_resize');

        $this->sizes = array_keys($configSizes);


        if ($sizes) {
            $this->sizes = $sizes;
        }
    }

    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        $outImages = [];

        if (!isset($this->resource->filename)) {
            return $outImages;
        }

        $outImages['original'] = [
            'width'  => $this->resource->width,
            'height' => $this->resource->height,
            'url'    => getMediaUrl($this->resource->filename)
        ];

        //If the image is gif file, and in order not to loose the animation, the output will be 
        // a single entry array with image format and no resizing link
        if (isset($this->resource->extension) && $this->resource->extension === 'gif') {
            return $outImages;
        }


        foreach ($this->sizes as $size) {
            $outImages[$size] = [
                'url' => getMediaUrl($this->resource->filename, $size)
            ];
        }

        return $outImages;
    }
}
