/* Do not remove the headers from this file! see /USAGE for more info. */
// Work in NonProgress ... will be finished sometime after Vendor has been redone. probably for a7

mapping skill_restrictions;
mapping trainer_msgs = ([
  "unable_msg" : "\"I cannot teach you that.\", the trainer tells $N.",
  "fail_msg" : "$N $vtrain for a while, but $vundergo no improvement.",
  "low_msg" : "$N $vtrain, but $vimprove little.",
  "mid_msg" : "$N $vtrain and $vimprove a little.",
  "high_msg" : "$N $vtrain hard, and $vimprove significantly",
  "very_high_msg" : "$N $vhas an excellent lesson, and $vimprove remarkably.",
  "reject_msg" : "\"I can teach you no more.\", the trainer tells $N.",
]);


void set_trainer_msgs( mapping msgs )
{
    string array msg_names = keys( trainer_msgs );
    foreach( string key, string msg in msgs )
    {
	if( !member_array( key, msg_names ) + 1 )
	    error( "Invalid msg name: " + key );
	trainer_msgs[ key ] = msg;
    }
}


void set_train_restrict( array restrictions )
{
    string array valid_skills = SKILL_D->query_skills();

    foreach( string skill, string restriction in restrictions )
    {
	if( member_array( skill, valid_skills ) == -1 )
	    error( "Invalid skill: " + skill );
	skill_restrictions += ([ skill : restriction ]);
    }
}


void do_training( object trainee, string skill )
{
    int trainee_skill = trainee->get_skill( skill );
    int trainer_skill = this_object()->get_skill( skill );
    string msg;

    if( !member_array( skill, keys( skill_restrictions )) + 1 || member_array( skill , keys( this_object()->get_skills()))) 
	msg = trainer_msgs[ "unable_msg" ];
    else if( trainee_skill < trainer_skill )
    {
	trainee->test_skill( skill, trainee_skill + 1 );
	switch( trainee->get_skill(skill) - trainee_skill )
	{
	case 0..1:
	    msg = trainer_msgs[ "fail_msg" ];
	    break;
	case 2..6:
	    msg = trainer_msgs[ "low_msg" ];
	    break;
	case 7..13:
	    msg = trainer_msgs[ "mid_msg" ];
	    break;
	case 14..18:
	    msg = trainer_msgs[ "high_msg" ];
	    break;
	default:
	    msg = trainer_msgs[ "very_high_msg" ];
	}
    }
    else msg = trainer_msgs["reject_msg"];

    this_object()->simple_action( msg );
}
