<?php

namespace App\Http\Resources;

use App\Http\Controllers\Traits\PriceFormatTrait;
use App\Repository\PriceRepository;
use App\ResidentialComplex;
use App\RoomCount;
use App\RoomType;
use Illuminate\Http\Resources\Json\ResourceCollection;

class ResidentialComplexCollection extends ResourceCollection
{
    use PriceFormatTrait;

    /**
     * @var array
     */
    private $parameters;

    /**
     * Create a new resource instance.
     *
     * @param  mixed $resource
     * @param array $parameters
     */
    public function __construct($resource, $parameters = null)
    {
        parent::__construct($resource);
        $this->resource = $resource;
        $this->parameters = is_array($parameters) ? $parameters : [];
    }

    /**
     * Transform the resource collection into an array.
     *
     * @param  \Illuminate\Http\Request $request
     * @return array
     */
    public function toArray($request)
    {
//        $roomCount = RoomCount::all();
//        $roomType = RoomType::all();

        $this->getExchangeRate();

        $result = [];
        foreach ($this->collection as $key => $item) {
            /** @var ResidentialComplex $residentialComplex */
            $residentialComplex = $item->resource;
            $pricing = (new PriceRepository())->generalPrice($residentialComplex->id);
            $result[$key] = [
                'id' => $residentialComplex->id,
                'slug' => $residentialComplex->code,
                'complex_name' => $residentialComplex->name,
                'site_link' => $residentialComplex->site_link,
                'site_utm' => $residentialComplex->site_utm,
                'preview' => [
                    'text' => $residentialComplex->preview ?
                        $residentialComplex->preview : "",
                    'color' => $residentialComplex->preview_color_picker ?
                        $residentialComplex->preview_color_picker : "",
                ],
                'developer' => [
                    'name' => $residentialComplex->developer ? $residentialComplex->developer->name : "",
                    'slug' => $residentialComplex->developer ? $residentialComplex->developer->code : "",
                    'logotype' => $residentialComplex->developer ?
                        new DeveloperImage($residentialComplex->developer) : [],
                ],
                'phone' => !empty($residentialComplex->phone) ? $residentialComplex->phone :
                    ($residentialComplex->developer && !empty($residentialComplex->developer->phone) ?
                        $residentialComplex->developer->phone : ""),
                'city' => $residentialComplex->city ? $residentialComplex->city->name : "",
                'street' => $residentialComplex->street_name ? $residentialComplex->street_name->name : "",
                'street_type' => $residentialComplex->street_name && $residentialComplex->street_name->type ? $residentialComplex->street_name->type->short_name : "",
                'street_number' => $residentialComplex->street_number ? $residentialComplex->street_number : "",
                'distance_to_center' => $residentialComplex->center_distance,
                'flat_count' => $residentialComplex->room_count,
                'lowest_price' => !empty($residentialComplex->min_price) ? $this
                    ->formatPrice((float) $residentialComplex->min_price)  : '',
                'is_subscribed' => isset($residentialComplex->is_subscribed) &&
                (int)$residentialComplex->is_subscribed > 0 ? true : false,
                'customer_rating' => ['avg' => number_format($residentialComplex->average, 1)],
//                'room_statistic' => [],
//                'room_statistic' => new ResidentialComplexPriceStatistic($residentialComplex, ['roomCount' => $roomCount, 'roomType' => $roomType]),
                'pricing' => count($pricing) > 0 ? new PriceCollection($pricing, $this->parameters) : [],
                'statuses' => new ResidentialComplexIconCollection($residentialComplex->icon),
//                'latitude' => $residentialComplex->location_latitude ? $residentialComplex->location_latitude : "",
//                'longitude' => $residentialComplex->location_longitude ? $residentialComplex->location_longitude : "",
            ];

            if (isset($this->parameters['location'])) {
                $result[$key]['latitude'] = $residentialComplex->location_latitude ?
                    $residentialComplex->location_latitude : 0;
                $result[$key]['longitude'] = $residentialComplex->location_longitude ?
                    $residentialComplex->location_longitude : 0;
            }

            if (isset($this->parameters['show_first_image'])) {
                $firstImage = $residentialComplex->getMedia('landscape_photo')->get(0);
                $imageCollection = collect([$firstImage]);
                $result[$key]['images'] = $firstImage ? new ResidentialComplexImagesCollection($imageCollection) : [];
            }

            if (isset($this->parameters['portrait'])) {
                $result[$key]['portret_images'] =
                    new ResidentialComplexImagesCollection($residentialComplex->getMedia('photo'), $this->parameters);

            } elseif (!isset($this->parameters['show_first_image'])) {
                $result[$key]['images'] =
                    new ResidentialComplexImagesCollection($residentialComplex->getMedia('landscape_photo'));
            }

            if (isset($this->parameters['portrait'])) {
                $result[$key]['images'] =
                    new ResidentialComplexImagesCollection($residentialComplex->getMedia('landscape_photo'));
            }
        }

        return $result;
    }
}
