<?


class Ui_analize_blocks {

	static $autorun = false;
	static $changed_setting = true; //  переходе на следующий этап, надо проверять, запускался ли анализ с текущими настройками

	// действия при активации этапа
	static function active() {
		GLOBAL $OP, $GOP, $INFO, $log, $Bt_run, $Graphs, $Disc_info, $Analize_autochoice;

		// выключаем подсветку кнопки завершающий этап
		visible_group('next_analize_blocks', false);

		$Graphs['disk']->legend->visible(GRD_good_write, 0);
		$Graphs['disk']->legend->visible(GRD_slow_auto, 1);
		$Graphs['disk']->legend->visible(GRD_read_err, 1);
		$Graphs['disk']->legend->visible(GRD_create_err, 1);
		$Graphs['disk']->legend->visible(GRD_frag, 1);
		$Graphs['disk']->legend->visible(GRD_all_slow, 1);
		$Graphs['disk']->legend->visible(GRD_result_space, 1);

		// надо прописывать во всех этапах!
		// здесь не нужно потому что кнопка analize_mode следит за этим и при переходе на этап она проверит.
		// Step_activator::graphs_enabled(1);

		// проматываем правую панель к графикам
		// отключили потому что возникают артефакты которые исчезают только если свернуть и развернуть
		// програмная промотка с канвайзами вызывает артефакты, которые не исчезают при обновлении формы или канвайза.
		// Ui_scroll::go($GOP['scrollbox_info'], 300);


		$INFO[FINAL_OPERATIONS]['substeps'] = array();


		// показываем подсказки у графиков (их скрытие произойдет по onChange)

		// один раз пересчитываем график скоростей, в read_blocks бывают погрешности с ним
		$INFO['analize_recalc_graph_speed'] = true;

		// сразу запускам пересчет если чтение файлов только что произошло.
		if(self::$autorun and $OP['autorun_steps']) {
			self::$autorun = false;

			// переходим на вкладку автоматический подбор
			c('Fm->analize_blocks_tabs')->pageIndex = 0;

			// он сам запустит пересчет
			$Analize_autochoice->start();
		}
	}


	static function before_run() {
		GLOBAL $log, $Graphs, $INFO, $Analize_autochoice ; 

		// блокируем ползунки графиков
		c('Fm->speed_select_bar')->enabled = false;
		c('Fm->frags_select_bar')->enabled = false;

		// показываем статистику этапа
		$GLOBALS['GB_step_stat']->enabled(true);
		//c('Fm->step_stat')->visible = true;

		// блокируем кнопки завершающий этап
		с('Fm->next_analize_blocks')->enabled = false;

		// блокируем кнопку автоподбора, сохранив ее статус
		$bt_autochoice = c('Fm->bt_autochoice_run');
		//$bt_autochoice->restore_enabled = $bt_autochoice->enabled;
		$bt_autochoice->enabled = false;

		// выключаем подсветку кнопки завершающий этап
		visible_group('next_analize_blocks', false);

		// убираем надписи что надо пересчитать графики
		$INFO['graph_speed_relevance_col_nomer'] = $Graphs['speed']->select_col_nomer;
		$INFO['graph_frags_relevance_col_nomer'] = $Graphs['frags']->select_col_nomer;


		// Очищаем сообщение. На самом деле его надо делать если был выполнен автоподбор, но потом человек решил еще проверить или в графиках поковыряться.
		// Но и такое топорное решение работает
		$Analize_autochoice->msg('');

		// очищаем статусы этапов create_blocks и read_blocks, потому что они не очищаются автоматически
		// а анализ полностью пересчитывает все статусы
		Stat::clear_blocks_stat_step('create_blocks');
		Stat::clear_blocks_stat_step('read_blocks');

		return true;
	}

	static function after_run_complete() {
		GLOBAL $INFO, $OP, $log, $Graphs, $BLK_const, $Analize_autochoice, $Bt_run;

		// помечаем что нет измененных настроек
		self::$changed_setting = false;

		// включаем ползунки графиков
		c('Fm->speed_select_bar')->enabled = true;
		c('Fm->frags_select_bar')->enabled = true;

		// скрываем статистику этапа
		//c('Fm->step_stat')->visible = false;
		$GLOBALS['GB_step_stat']->enabled(false);

		// блокируем кнопки завершающий этап
		с('next_analize_blocks')->enabled = true;

		if($Analize_autochoice->get_status() == 'process') {
			 $enabled = false;
		}
		else {
			$enabled = true;
			// если не идет автоподбор, то подсвечиваем кнопку следующий этап
			visible_group('next_analize_blocks', true);
		}
		c('Fm->bt_autochoice_run')->enabled = $enabled;
		

		// вызываем кнопку следующий этап если стоит пометка
		if(!empty($INFO['next_step_after_analize'])) {
			$INFO['next_step_after_analize'] = false;
			self::bt_next_step(false);
		}
		else {
			// итерация автоподбора настроек
			$log->line('after_run_complete');
			$Analize_autochoice->iter(); // он сам запустит пересчет графиков если надо

			if($Analize_autochoice->get_status() == 'finish' and $OP['step_analize_autoprohod']) {
				self::bt_next_step(true); // имитируем нажатие кнопки "следующий этап"
			}
		}
		
		// $mas = $BLK_const->all_name_to_value();
		// foreach($mas as $const_name=>$const_value) {
		// 	if($const_name == 'BLK_write_ok') continue;

		// 	$num_blocks =  $INFO[$const_value];

		// 	$mb = $num_blocks * $OP['block_size'] / 1024;
		// 	$log->line("$const_name: $mb ");
		// }
		

	}

	// выбор режима: простой или продвинутый
	static function bt_select_mode() {
		GLOBAL $INFO, $OP, $log, $Graphs;

		//$log->line('bt_select_mode ' . $OP['analize_mode']);

		// костыль
		// блокировка кнопок если не этап анализа
		 // isset($INFO['step']) нужен потому что  bt_select_mode вызывается из кнопки по onChange. А это может произойти раньше чем Mselect_disc
		if(!isset($INFO['step']) or $INFO['step'] != 'analize_blocks') 
			return true;

		$Graphs['speed']->set_enabled(1);

		if($OP['analize_mode'] == 1) {
			// выключаем график фрагментов
			$Graphs['frags']->set_enabled(0);

			// показываем маркер только для первого графика
			//if(!isset($INFO['step']) or $INFO['step'] != 'analize_mode') return true;
		}
		else {
			// включаем график фрагментов
			$Graphs['frags']->set_enabled(1);

			// показываем маркеры обоим графикам
		}
	}

	// кнопка "следующий шаг"
	static function bt_next_step($user_run=true) {
		GLOBAL $OP, $INFO, $Ui_thread, $Bt_run;
		
		if($INFO['step'] != 'analize_blocks') return false;

		// проверка что поток не запущен
		if($Ui_thread->check_run_dialog())
			return false;

		//if(self::$changed_setting) {
		// если запустил пользователь, запускаем пересчет с сохранением результатов
		// программый же запуск пропустит после этого анализа пропустит этот момент
		if($user_run) {

			if(!$OP['step_analize_autoprohod']) { // это условие все таки нужно
				$text = "Последующие операции нельзя отметить.
	Если вас не устроят выбранные настройки, придется начинать все этапы с начала.
	Запускаем?";

				$res = messageDlg($text, mtWarning, MB_OKCANCEL);
				if($res == 2)
					return false;

				// cообщение о демо версии
				// больше не нужно
				// if($INFO['demo_overlimit']) {
				// 	$res = messageDlg(ERROR_DEMO_OVERLIMIT, mtInformation, MB_OKCANCEL);
				// 	if($res == 2)
				// 		return false;
				// }
			}

			// пометка чтобы после анализа сразу нажал на кнопку следующий этап
			$INFO['next_step_after_analize'] = true;
			$INFO['analize_blocks_save'] = true;
			
			// запускаем анализ
			$Bt_run->onClick('analize_blocks');
			
			return false;
		}

		$result_space = Stat::calc_result_space();
		if($result_space <= 0) {
			messageDlg("Полезное место равно нулю.\nУменьшите скорость чтения или размер фрагмента.", mtWarning, MB_OK);
			return false;
		}

		$cur_step = $INFO['step'];
		$new_step = Steps_info::get_next($cur_step);
		$INFO['step'] = $new_step;

		Ui_timers::tick_root();
	}
}


?>