<?php

namespace Planaday\Entities\Location;

use ArrayAccess;
use Countable;
use Planaday\Api\ApiException\InvalidResponseException;
use Planaday\Entities\Location\DTO\Location;
use Planaday\Entities\Location\Exception\LocationNotFoundException;
use Traversable;

interface LocationApi {

	/**
	 * @param ArrayAccess<int|string, string>&Traversable<int|string, string>&Countable $locationIds
	 *
	 * @return ArrayAccess<int|string, Location>&Traversable<int|string, Location>&Countable
	 * @throws InvalidResponseException
	 * @throws LocationNotFoundException
	 */
	public function getLocations(ArrayAccess&Traversable&Countable $locationIds): ArrayAccess&Traversable&Countable;

	/**
	 * @param string $locationId
	 *
	 * @return Location
	 * @throws InvalidResponseException
	 * @throws LocationNotFoundException
	 */
	public function getLocation(string $locationId): Location;
}