package projects.SelfToken.nodes.nodeImplementations;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Stroke;
import java.util.LinkedList;

import projects.defaultProject.nodes.messages.Msg;
import projects.defaultProject.nodes.nodeImplementations.TimerNode;
import sinalgo.gui.transformation.PositionTransformation;

// N.B. ce code s'exécute sur un anneau orienté donc pour l'envoi de message utilisez "sendSuccessor"
public class TokenNode extends TimerNode {
 
    int v=-1;
    static int K;
    static Color Couleurs[] = {Color.gray, Color.red, Color.cyan, Color.yellow, Color.blue, Color.darkGray,  Color.green, Color.orange, Color.lightGray, Color.magenta,  Color.pink};
	
	public void initialization() {
		// à compléter
	}
	
	// Cette fonction est appelée régulièrement par un minuteur
	// Elle doit donc contenir le code à exécuter régulièrement 
	// (c'est-à-dire, le code à exécuter sur expiration du minuteur dans l'algorithme)
	public void regularly() {
		// à compléter
	}
	
	public void receipt(LinkedList<Msg> inbox) {
		// à compléter
	}
 
	
	 public Color coloriage() {
		 if(v==-1) return Color.black;
		 return Couleurs[this.v%11];
	 }
	
	
  
    public void draw(Graphics g, PositionTransformation pt, boolean highlight){	 
    	String text = " "+this.v+" ";
    	if(v<10) text = " "+text;
    	this.setColor(this.coloriage());
    	super.drawNodeAsDiskWithText(g, pt, false, text, 30, Color.black);
	 
    	if(this.root()) {
    		this.setColor(Color.black);
    		Graphics2D g2=(Graphics2D) g;
    		Stroke stroke = new BasicStroke(3f, BasicStroke.CAP_ROUND,BasicStroke.JOIN_MITER, 10.0f); 
    		g2.setStroke(stroke);
    		int x=(int) pt.guiX;
    		int y=(int) pt.guiY;
    		g2.drawOval(x-16, y-16, 32, 32);
    	}
    }	
    
}
