package fr.cnam.joueur;
import java.util.*;
import java.io.*;
import java.awt.Point;
import fr.cnam.ihm.*;
import fr.cnam.joueur.*;

// 
public class FormCreerAgents implements FormulaireInt
{
  private FactoryAgentInt factory;
  private Formulaire        form;
  private ArrayList<String> classesAgent;
    
  // Constructeur
  public FormCreerAgents(FactoryAgentInt factory,int couleur)
  {
    this.factory = factory;

    form = new Formulaire("Creer agents",this,300,500);
    form.addText("TYPE_AGENT","Type d'agent",true,"");
    form.addButton("CREER_AGENT","Creer un agent");
    try{
      System.out.println("====>"+factory.getPathClassesAgent());
      classesAgent = getClassesAgent(factory.getPathClassesAgent());
    }catch(Exception ex){};
    int num=1;
    for(String classeAgent : classesAgent)
      {
        form.addLabel(classeAgent);
        form.addText("NB_AGENT_"+num,"Nombre d agent",true,"10");
        form.addButton("CR_AGENT_"+num,"Creer");
        num++;
      }
    form.addText("COULEUR","Couleur",true,""+couleur);
    form.addText("MORTALITE","Mortalite",false,"0");

    form.addButton("Quit","Quit");
    form.setButtonFermer("Quit");
    try{
      form.afficher();
    }catch(FormulaireException ex)
      {
        System.out.println("Erreur de saisi dans le formulaire :"+ex);
      }

    new PullFactoryAgent().start();
  }

  //
  public void submit(Formulaire form, String nomSubmit)
  {
    try{
      if (nomSubmit.equals("CREER_AGENT"))
        {
          String nomClasse=form.getValeurChamp("TYPE_AGENT");
          int couleur=Integer.parseInt(form.getValeurChamp("COULEUR"));
          AgentInt s = factory.creerAgent(nomClasse,couleur);
        }

      if (nomSubmit.startsWith("CR_AGENT_"))
        {
          int num = Integer.parseInt(nomSubmit.replace("CR_AGENT_",""));
          int couleur=Integer.parseInt(form.getValeurChamp("COULEUR"));
          int nb = Integer.parseInt(form.getValeurChamp("NB_AGENT_"+num));
          for(int i=0;i<nb;i++)
            {
              System.out.println("====> "+classesAgent.get(num-1));
              AgentInt s = factory.creerAgent(classesAgent.get(num-1),couleur);
            }
        }

    }
    catch(Exception ex){ex.printStackTrace();};
  }

  private static ArrayList<String> getClassesAgent(String pathClassesAgent)
  {
    ArrayList<String> list = new ArrayList<String>();
    File dir = new File(pathClassesAgent+"/fr/cnam/joueur");
    String[] files = dir.list();
    for(String f : files)
      {
        if (f.startsWith("Agent_"))
          {
            System.out.println("----> "+"fr.cnam.joueur."+f.replace(".class",""));
            list.add("fr.cnam.joueur."+f.replace(".class",""));
          }
      }
    return list;
  }

  class PullFactoryAgent extends Thread
  {
    public void run()
    {
      while (true)
        {
          try {
            int taux = factory.getTauxMortalite();
            form.setValeurChamp("MORTALITE",""+taux);
            Thread.sleep(100);
          }catch(Exception ex){ex.printStackTrace();};
        }
    }
  }
}

