<?php

namespace App\PackagesApi\v4\Controllers\Core;

use App\Http\Controllers\Controller;
use App\Packages\User\Models\User;
use App\PackagesApi\v4\Requests\Capsule\AddressRequest;
use App\PackagesApi\v4\Requests\Capsule\LocationRequest;
use App\Services\GoogleMaps\GoogleGeoService;
use App\Services\GoogleMaps\Unit\GoogleLatLngPlaceUnit;
use App\Services\GoogleMaps\Unit\GooglePlaceUnit;
use Illuminate\Http\JsonResponse;

/**
 * Class LocationController
 *
 * @package App\Http\Controllers\API
 */
class LocationController extends Controller
{
    /** @var User */
    private $user;

    public function __construct()
    {
        $this->user = user();
    }

    /**
     * @param LocationRequest $request
     * @param GoogleGeoService $geoService
     *
     * @return JsonResponse
     */
    public function places(LocationRequest $request, GoogleGeoService $geoService)
    {
        $places = $geoService->getPlacesByLatLng($this->user, $request->lat, $request->lng);
        $places = $places->map(function (GoogleLatLngPlaceUnit $place) {
            return $place->toSimpleArray();
        });

        return jsonSuccess([
            'places' => $places,
        ]);
    }

    /**
     * @param AddressRequest $request
     * @param GoogleGeoService $geoService
     *
     * @return JsonResponse
     */
    public function search(AddressRequest $request, GoogleGeoService $geoService)
    {
        $places = $geoService->getPlacesUnits($this->user, $request->address_string, $request->lat, $request->lng);
        $places = $places->map(function (GooglePlaceUnit $element) {
            return $element->toSimpleArray();
        });

        return jsonSuccess([
            'places' => $places->all(),
        ]);
    }
}
