package version11_2_2_1.agnosticMemory;

import version11_2_2_1.Interface.PrimitiveInteraction;
import version11_2_2_1.platform.Agent;

/**
 * Decision system.
 * This class selects the intended interactions
 * @author simon
 */
public class Decision {

	private Agent agent;
	
	private PrimitiveInteraction intention=null;

	public int counter=0;
	
	public int timer=4;
	
	///////////////////////////////////////////////////////////
	public Decision(Agent a){
		agent=a;
	}
	
	/**
	 * decision of the next interaction
	 * @return the intended enact
	 */
	/*public PrimitiveInteraction decision(){
		
		if (counter==0){
			
			System.out.println();System.out.println();
			
			int imin=-1;
			float min=10;
	
			// a candidate interaction must be valid and not predicted as a failure with high certitude,
			// and must be a primary interaction or being predicted with a sufficient certitude to avoid unpredictable interactions
			for (int i=0;i<agent.signatureList.size();i++){
				if (agent.signatureList.isValid(i) && agent.signatureList.get(i).getPrediction()>-0.9
				 && (i>=InteractionList.nbDF || Math.abs(agent.signatureList.get(i).getPrediction())>0.5)){
					if (Math.abs(agent.signatureList.get(i).getPrediction())<min){
						imin=i;
						min=Math.abs(agent.signatureList.get(i).getPrediction());
					}
				}
			}
			
			System.out.println("Select interaction "+imin+" : "+agent.signatureList.get(imin).interaction().getName()+" ; "+min);
			intention=agent.signatureList.get(imin).interaction();
	
			counter++;
			
			return intention;
		}
		else{
			
			if (counter==timer){
				counter=0;
				timer=(int)(Math.random()*7)+1;
				System.out.println(timer);
			}
			else counter++;
			
			return null;
		}
		
	}*/
	
	public int decision(){
		
		int ret=0;
		
		
		// define prediction of variations through signatures
		
		
		boolean found=false;
		int i=0;
		while (!found && i<16){
			if (agent.environmentContext.id1>=0 && agent.environmentContext.interactionList[agent.environmentContext.id1].nbTests[i]==0) found=true;
			else i++;
		}
		
		if (found) ret=i;
		else{
			if (counter==0) ret=(int)(Math.random()*12)+4;
			
			if (counter==timer){
				counter=0;
				timer=(int)(Math.random()*7)+1;
				System.out.println(timer);
			}
			else counter++;
		}
		
		if (agent.environmentContext.id1>=0) agent.environmentContext.interactionList[agent.environmentContext.id1].setTest(ret);
		System.out.println(" set variation "+ret+" to interaction "+agent.environmentContext.id1);
		
		return ret;
		
	}

	/**
	 * Get the last intended interaction
	 * @return the last selected intended interaction
	 */
	public PrimitiveInteraction getIntention(){
		return intention;
	}
}
