:- ensure_loaded('$REGULUS/PrologLib/compatibility').

:- module(output_manager,
	[abstract_action_to_action/2]
    ).

%======================================================================

:- use_module('$REGULUS/Prolog/generate').

:- use_module(library(lists)).

:- use_module('$REGULUS/PrologLib/utilities').

%======================================================================

% OUTPUT MANAGEMENT: ABSTRACT ACTION TO CONCRETE ACTION

abstract_action_to_action(say(AbsResponse, Tense), tts(Atom)) :-
	perform_output_generation(AbsResponse, Tense, Atom),
	!.

perform_output_generation(AbsAction, Tense, OutputAtom) :-
	generation_grammar(AbsAction, Tense, OutputWords, []),
	fix_orthography(OutputWords, OutputWords1),
	join_with_spaces(OutputWords1, OutputAtom),
	!.
perform_output_generation(_AbsAction, _Tense, OutputAtom) :-
	OutputAtom = 'sorry, i can\'t produce any output',
	!.
perform_output_generation(_AbsAction, _Tense, _OutputAtom) :-
	format('~N~nError in output manager.~n', []),
	fail.

generation_grammar(no, _Tense) --> ['no'].
generation_grammar(yes, _Tense) --> ['yes'].
generation_grammar(unable_to_interpret, _Tense) --> ['sorry that doesn\'t make sense'].
generation_grammar(ambiguous, _Tense) --> ['sorry, that\'s ambiguous'].
generation_grammar(i_dont_understand, _Tense) --> ['sorry, I don\'t understand'].