package projects.CIJUA.nodes.nodeImplementations;

import java.awt.Color;
import java.awt.Graphics;
import java.util.LinkedList;


import projects.CIJUA.nodes.messages.J;
import projects.defaultProject.nodes.messages.Msg;
import projects.defaultProject.nodes.nodeImplementations.TimerNodeMono;
import sinalgo.gui.transformation.PositionTransformation;

//ATTENTION : dans la classe TimerNodeMono, les canaux sont indicés de 0 à degree(p)-1 pour chaque processus p

public class CIJUANode extends TimerNodeMono {

	Color C=Color.green;

    public int Pere=-1; // pour l'affichage
	
    // monoinitiateur
	public void spontaneously() {
		this.inverse(); // pour l'affichage
		this.send(new J(), 0);
	}
	
	// Cette fonction est appelée régulièrement par un minuteur
	public void regularly() {
	}
	
	public void receipt(LinkedList<Msg> inbox) {
		for(Msg J: inbox) {
			
			int C=this.from(J);

			if((this.Pere==-1 && !this.initiator()) || (this.initiator() && C==this.degree()-1))
				this.inverse(); // pour l'affichage
			
			
			if(this.Pere==-1 && !this.initiator())
				this.Pere=C; // pour l'affichage			
			
			if(Pere==(C+1)%this.degree()) Pere=-1;
			this.send(new J(), (C+1)%this.degree());
	
		}
	}
 
    public void inverse() {
    	if(C==Color.green) C=Color.blue;
    	else C=Color.green;
    }

    public void draw(Graphics g, PositionTransformation pt, boolean highlight){
    	this.setColor(this.C);
    	String text = "";
    	super.drawNodeAsDiskWithText(g, pt, highlight, text, 20, Color.black);
    }	
    
}
