<?php

namespace AirQuality\Repositories;

/**
 * Defines the interface of repositories that fetch device information.
 */
interface IDeviceRepository {
	/**
	 * Returns an array of all the devices in the system with basic information
	 * about each.
	 * @param   bool    $only_with_location Whether only devices with a defined location should be returned.
	 * @return  array	A list of devices and their basic information.
	 */
	public function get_all_devices($only_with_location);
	
	/**
	 * Gets a bunch of information about a device.
	 * This method returns _considerably_ more information than the above one 
	 * that lists a bunch of devices, but only works for 1 device at a time.
	 * @param	int		$device_id	The id of the device to get information for.
	 * @return	array	The extended information available on the given device.
	 */
	public function get_device_info_ext($device_id);
	
	/**
	 * Gets a list of devices that are near the specified location.
	 * @param	float	$lat	The latitude of the location to get devices near.
	 * @param	float	$long	The longitude of the location to get devices near.
	 * @param	int		$count	The number of nearby devices to return.
	 * @return	array	An array of nearby devices.
	 */
	public function get_near_location(float $lat, float $long, int  $count);
}