package fr.cnam.clientihm;

import java.rmi.*;
import java.rmi.registry.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

import fr.cnam.espacetore.*;
import fr.cnam.grille.*;
import fr.cnam.clientihm.*;
import fr.cnam.util.*;
import fr.cnam.ihm.*;

// Classe de visualisation de la grille de jeu
// Mode de communication avec l'espace de Tore : Pull
// Cette ihm tire l'etat de la grille de l'espace de Tore
//
public class IHMVisuJeuPull implements FormulaireInt
{
    private CanvasIHM  grilleihm;
    private EspaceToreODInt espace;

    public static void main(String... args) throws Exception
    {
        new IHMVisuJeuPull(args);
    }

    public IHMVisuJeuPull(String... args) throws Exception
    {
        // Port du serveur de socket RMI car pour etre notifie on cree un objet distribue
        // Si on cree plusieurs client sur la meme machine, il faut que ce port soit
        //  different
        // 
        Parametres params = new Parametres(args);

        // Host de l'espace de tore
        String hostEspaceTore = params.getString("host_espace_tore","localhost");

        // Port de l'espace de tore
        int portEspaceTore = params.getInt("port_annuaire",9100);

        // Port RMI des agents
        int portRMI = params.getInt("port_od",9103);


        String name = "rmi://"+hostEspaceTore+":"+
            portEspaceTore+"/"+
            EspaceToreOD.NOM_ESPACE_TORE;
        System.out.println(name);
        espace = (EspaceToreODInt)(Naming.lookup(name));
        
        // récrupération des tailles de la grille
        int nbX=espace.getNbX();
        int nbY=espace.getNbY();
        int tailleCellule=espace.getTailleCellule();
        int tailleCase = 15;

        // On crée le formulaire
        Formulaire form = new Formulaire("GRILLE",this,nbX*tailleCase+20,nbY*tailleCase+20);

        // On y ajoute la grille
        grilleihm = form.addGrilleIHM(nbX,nbY,tailleCase,null);
        form.afficher(50,50);

        // Thread qui tire l'etat de la grille de l'espace de Tore
        ThreadPullPopulation t = new ThreadPullPopulation();
        t.start();
    }

    public void     submit(Formulaire form,String nom)
    {
    }

    // Classe de defintion du Thread de Pull
    // ----------------------------------------
    class ThreadPullPopulation extends Thread
    {
        public void run()
        {
            if (grilleihm==null)System.out.println("NULL");
            try{
                while (true)
                    {
                        // Pull de l'etat de la grille
                        CelluleGrille[][] grille = espace.getGrille();
                        //
                        for(int i=0;i<espace.getNbX();i++)
                            for(int j=0;j<espace.getNbY();j++)
                                if (grille[i][j]!=null)
                                    {
                                        if (grille[i][j].couleur!=grilleihm.getMarque(i,j))
                                            grilleihm.setMarque(grille[i][j].couleur,i,j);
                                    }
                                else
                                    if (grilleihm.getMarque(i,j)!=0)
                                        grilleihm.setMarque(0,i,j);
                        try{Thread.sleep(100);}catch(Exception ex){};
                    }
            }
            catch(Exception ex){System.out.println("erreur:"+ex);ex.printStackTrace();};
        }
    }
}
