<?php

namespace AirQuality\Repositories;

interface IMeasurementDataRepository {
	/**
	 * Returns the specified reading type for all devices at the specified date 
	 * and time.
	 * @param	DateTime	$datetime		The date and time to get the readings for.
	 * @param	string		$reading_type	The reading type to fetch.
	 * @return	array		The requested readings.
	 */
	public function get_readings_by_date(\DateTime $datetime, string $reading_type);
	
	/**
	 * Gets the first and last DateTimes of the readings for a specified device.
	 * @param	int			$device_id	The device id to fetch for.
	 * @return	DateTime[]	The first and last DateTimes for which readings are stored.
	 */
	public function get_device_reading_bounds(int $device_id);
	/**
	 * Gets the readings of a specified type for a specific device between the 2 given dates and times.
	 * @param	int			$device_id		The id of the device to fetch data for.
	 * @param	string		$reading_type	The reading type to fetch.
	 * @param	DateTime	$start			The starting DateTime.
	 * @param	DateTime	$end			The ending DateTime.
	 * @param	int			$average_seconds	The number of seconds to averageg the data over. For example a value of 3600 (1 hour) will return 1 data point per hour, with the value of each point an average of all the readings for that hour.
	 * @return	array		The requested data.
	 */
	public function get_readings_by_device(int $device_id, string $reading_type, \DateTime $start, \DateTime $end, int $average_seconds = 1);
	
}