:- use_module('$TRINDIKIT/core/prolog/trindikit').
:- ensure_loaded(app_search_paths).
:- use_module(trindikit(tkit_control_access),[control/0]).


startit:-
	setprop(control,yes),
	control_algorithm(Ctrl),
	setprop(control-algorithm,Ctrl),
	setprop(oaa-name,'control'),
	setprop(oaa-libdir,'$OAA_HOME/src/oaalib/prolog'),
	setprop(oaa,yes),
	control.


%CONTROL ALGORITHM

control_algorithm(A):-
  setof(Trig=>Algo,Trig=>Algo,A).

init => [input:init,
	 interpret:init,
	 generate:init,
	 output:init,select,generate,output,update].

condition(not $program_state ==  run) => [input:quit,
					  output:quit,
					  interpret:quit,
					  generate:quit].

				%condition($latest_speaker == sys) => update,
condition(is_set(input_queue)) => [if not is_empty($input_queue) then
				     [oaa_Solve(start_timer(input,1.0))]].
condition(alarm(input)) => [InputQueueToInput,
			    interpret,update,print_state |SysTurn]:-

	InputQueueToInput = apply_rule(moveInputQueueToInput,
				       [$input_queue=Q ],
				       [clear(input_queue),
					clear(input),
					forall_do(in(Q,String),
					       [ append(input,String),
						 append(input," ") ] ) ]),
						   
	
	SysTurn = [  repeat( [ select,
			       test(not is_empty($next_moves)),
			       generate,
				%check_condition(to_atom($output,B)),
				%oaa_Solve(outputGuiTxt(B)),
			       %check_condition(to_atom($output_gui,A)),
			       %oaa_Solve(outputGui(A)),
			       %print_state,
			       output,
			       %apply_update(clear(next_moves)),
			       update,
			       print_state,
			       test(not is_empty($/private/agenda)),
			       test(is_empty($/shared/qud))
			     ])%,
		     %if $program_state == run then
		  %[oaa_Solve(start_timer(input,4.0))]
		  ].


%%% init => [input:init,
%%% 	 interpret:init,
%%% 	 generate:init,
%%% 	 output:init,
%%% 	 select].

%%% condition(not $program_state ==  run) => [input:quit,
%%% 					  output:quit,
%%% 					  interpret:quit,
%%% 					  generate:quit].

%%% condition(is_set(input)) => [interpret].

%%% %condition(not empty($next_moves)) => [generate,output,update].

%%% condition($latest_speaker == usr) => [update,select,generate,output,
%%% 				      check_condition(to_atom($output,B)),
%%% 				      oaa_Solve(outputGuiTxt(B)),
%%% 				      check_condition(to_atom($output_gui,A)),
%%% 				      oaa_Solve(outputGui(A)),
%%% 				      update].