<?php

/*****************************************************************
Пример использования:

$weight_calc = new TrackWeight();
$weight_calc->setTrackData('Blondie', 'Call Me', 210);
$weight_calc->setFiles($files); // Файлы, полученные от парсера
$weight_calc->calculateWeight();
$files = $weight_calc->getFiles();
*****************************************************************/

/**
 * Класс посчета веса файла (коэфициента, определяющего релевантность)
 *
 * @package classes
 * @author chez
 **/
class TrackWeight {

	private $_artist;	// Имя исполнителя
	private $_track;	// Название трека
	private $_duration;	// Длительность трека в секундах
	
	private $_files;	// Массив файлов для сравнения

	/**
	 * Задает параметры оригинального трека
	 *
	 * @param string $artist	Имя исполнителя
	 * @param string $track		Запрос
	 * @param int $duration		Длительность трека в секундах
	 * @return void
	 * @author chez
	 **/
	public function setTrackData($artist, $track, $duration) {
		$this->_artist = $artist;
		$this->_track = $track;
		$this->_duration = $duration;
	}
	
	/**
	 * Задает массив файлов для сравнения
	 *
	 * @param array $files	Массив файлов для сравнения
	 * @return void
	 * @author chez
	 **/
	public function setFiles($files) {
		$this->_files = $files;
	}

	/**
	 * Возвращает файлы с проставленным весом
	 *
	 * @return array $files	Массив файлов
	 * @author chez
	 **/
	public function getFiles() {
		return $this->_files;
	}
	
	/**
	 * Рассчитывает вес для каждого файла
	 *
	 * @return void
	 * @author chez
	 **/
	public function calculateWeight() {
		foreach ($this->_files as $i => $file) {
			$weight = 0;
			
			if ($file['artist'] == $this->_artist) {
				$weight += 10;
			} elseif (strpos($file['artist'], $this->_artist) !== false) {
				$weight += 5;
			} elseif (strpos($file['track'], $this->_artist) !== false) {
				$weight += 4;
			}
			
			if ($file['track'] == $this->_track) {
				$weight += 10;
			} elseif (strpos($file['track'], $this->_track) !== false) {
				$weight += 5;
			}
			
			if ($file['duration'] == $this->_duration) {
				$weight += 10;
			} else {
				$delta = abs($file['duration'] - $this->_duration);
				if ($delta < 5) {
					$weight += (5 - $delta);
				}
			}
			
			$this->_files[$i]['weight'] = $weight;
		}
	}
}