<?

// преобразование единиц

class Measure_convert {
	
	// преобразует размер в сокращенный вид. Автоматически выбирает мегабайты или гигабайты.
	// если итоговая цифра превышает max_symbols, делаем округление пока чтобы избавиться от лишних символов
	// корректно работает только с килобайтами
	// $short_view = true экономим 2 символа удалением пробела и буквы B
	function pretty_size($size, $measure_input, $short_view = false, $max_symbols=0) {
		$round = 2;

		if(!$size)
			return '0';

		switch($measure_input) {
			case 'BT':
				$sizeBt = $size;
				break;
			case 'KB':
				$sizeBt = $size*1024;
				break;
			case 'MB':
				$sizeBt = $size*1024*1024;
				break;
			case 'GB':
				$sizeBt = $size*1024*1024*1024;
				break;

			default:
				throw new Error_def("Неизвестная единица измерения: '$measure_input'");
		}

		$sizeGb = $sizeBt / 1024 / 1024 / 1024;
		$sizeTb = $sizeBt / 1024 / 1024 / 1024 / 1024;

		if($sizeTb >= 0.97) {
			// терабайты
			$output_size = $sizeTb;
			$unit = 'T';
		}
		elseif($sizeGb >= 0.97) { // чтобы не было цифр вроде 1020.
							 //при ограничении в гиг, в графике скоростей не придется переделывать GB в MB
			// гигабайты
			$output_size = $sizeGb;
			$unit = 'G';
		}
		else {
			// мегабайты
			$output_size = $sizeBt / 1024 / 1024;
			$unit = 'M';
		}

		// если вывод не сокращенный, добавляем пробел и букву B
		if(!$short_view) $unit = " {$unit}B";

		$output_size = round_nobug($output_size, $round);

		// обрезаем по max_symbols
		// кривовато сделано, но не хочется заморачиваться
		if($max_symbols) {
			for($round = $round - 1; $round>=0; $round --) { // 
				if(strlen($output_size) - 1 > $max_symbols) { // -1 потому что точку не считаем за символ
					$output_size = round_nobug($output_size, $round);
				}
				else
					break;
			}
		}

		return $output_size . $unit;
	}

	function block_time_to_speed($time) {
		GLOBAL $OP;
		
		// $log->line($OP['block_size']/1024/$result_time); // работает
		// $log->line(round_nobug($OP['block_size']/1024/$result_time), 4);  // уже не работает
		// $log->line(round_nobug(0, 4)); // это работает
		
		if(!$OP['block_size']) throw new Error_def('block_size не указан');
		if(!$time) throw new Error_def('время не указано');
		
		return round_nobug($OP['block_size']/1024/$time, 3);
	}
	
	// блоки в мегабайты
	function blocks_to_mb($num) {
		GLOBAL $OP, $log;
		
		$mb = round_nobug($num*$OP['block_size']/1024, 2);
		return $mb;
	}

	
	// разделяет время на часы, минуты, секунды
	// возвращает в виде строки H:i:s
	function format_time($time) {
		GLOBAL $log;
		
		//$log->line($time);
		
		// округляем до секунд
		$time = floor($time);
		
		$hour = floor($time/(60*60));
		//$log->line($hour);
		
		$ostatok = $time - $hour*60*60;
		//$log->line($ostatok);
		
		$minut = floor($ostatok/60);
		//$log->line($minut);
		
		$sec = $ostatok - $minut*60;
		//$log->line($sec);
		
		if(strlen($hour) == 1) $hour = 0 . $hour;
		if(strlen($minut) == 1) $minut = 0 . $minut;
		if(strlen($sec) == 1) $sec = 0 . $sec;
		
		$res =  array('H'=>$hour, 'm'=>$minut, 's'=>$sec);
		
		return "$res[H]:$res[m]:$res[s]";
	}
	
}