import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.awt.event.*;
import java.io.*;
import java.util.StringTokenizer;

public class CreeExoOrth1 extends CreeExercice{
    Vector question = new Vector();
    Frame fenetre;
    String chaine="";
    String typeExo="";
    JPanel panel;
    JPanel panelBas;
    JPanel panelPrincipal;
    int x=50;
    int y=140;
    String questionSelected="0";
    TextField[] mesTexteFields;
    TextField champNbCases;
    TextField champConsigne;
    int nbCases;
    TextField champTitre;
    int nbQuestion=0;
     Educatemps inter;
    JScrollPane scroll;
    Choice listeNiveau = new Choice();
    JLabel labelNiveau = new JLabel("Le niveau de l'exercice");
    JButton boutonValideExo;

    public CreeExoOrth1( Educatemps i){
	Dimension tailleEcran = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
	int hauteur = (int)tailleEcran.getHeight();
	int largeur = (int)tailleEcran.getWidth();
	inter=i;
	typeExo="orth";
	fenetre = new Frame("Création d'exercices");
	fenetre.addWindowListener(new WindowAdapter(){
		public void windowClosing(WindowEvent e){
		    fenetre.dispose();
		}
	    }
				  );
	
	panelPrincipal = new JPanel();
	panel = new JPanel();
	panelBas = new JPanel();
	//panelBas.setBackground(Color.blue);
	panel.setLayout(null);
	panelBas.setLayout(null);
	panelPrincipal.setLayout(new BorderLayout());
	panelBas.setPreferredSize(new Dimension(largeur-10, 1200));
	panel.setPreferredSize(new Dimension(largeur-10, 200));
	panelPrincipal.add(panel,BorderLayout.NORTH);
	panelPrincipal.add(panelBas,BorderLayout.CENTER);
	scroll= new JScrollPane(panelPrincipal);
	fenetre.add(scroll);
	fenetre.setSize(largeur, hauteur-25);
	//fenetre.setResizable(false);
	//fenetre.pack();
	fenetre.show();
    }
    
   
    public String poseQuestion(String txt){
	return JOptionPane.showInputDialog(null,txt);
    }


   

    public void inter(){

	labelNiveau.setBounds(new Rectangle(40,40,200,20));
	panel.add(labelNiveau,null);
	listeNiveau.addItem("niveau");
	listeNiveau.addItem("Facile");
	listeNiveau.addItem("Difficile");
	listeNiveau.setBounds(new Rectangle(250,40,150,20));
	panel.add(listeNiveau,null);



	//le nombre de cases
	champNbCases =  new TextField("0",30);
	champNbCases.setBounds(new Rectangle(250,90,30,20));
	JLabel labelNbCases = new JLabel("Rentrer le nombre de cases");
	labelNbCases.setBounds(new Rectangle(40,90,200,20));
	JButton boutonNbCases = new JButton("OK");
	boutonNbCases.setBounds(new Rectangle(350,90,70,20));
	JLabel titre = new JLabel("Rentrer le titre de l'exercice");
	//concernant le titre de l'exo
	champTitre = new TextField(30);
	titre.setBounds(new Rectangle(40,130,200,20));
	champTitre.setBounds(new Rectangle(250,130,250,20));
	
	panel.add(boutonNbCases);
	panel.add(labelNbCases);
	panel.add(champNbCases);
	panel.add(titre);
	panel.add(champTitre);

	

	
	boutonNbCases.addActionListener(new ActionListener(){
    		public void actionPerformed(ActionEvent e){
		    valideCase();
		    }		   
		}
					);
	
	//le bouton de validation de l'exercice
	boutonValideExo = new JButton("Valider l'exercice");
	boutonValideExo.setBounds(new Rectangle(650,50,250,50));
	boutonValideExo.setBackground(new Color (186, 198, 230));
        boutonValideExo.setFont(new java.awt.Font("Arial", 1, 15));
	panel.add(boutonValideExo,null);
	boutonValideExo.setEnabled(false);
	panel.revalidate();
	panel.repaint();
	boutonValideExo.addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent e){	
		    valideExo();
		}
	    }
					  );
    }
    

    public void valideCase(){
	final ButtonGroup group = new ButtonGroup();
	class RadioListener implements ActionListener { 
	    public void actionPerformed(ActionEvent e) {
		questionSelected = e.getActionCommand();
	    }
	}
	panelBas.removeAll();
	panelBas.revalidate();
	panelBas.repaint();
	panelPrincipal.revalidate();
	panelPrincipal.repaint();
	scroll.revalidate();
	scroll.repaint();
	nbCases=(new Integer(champNbCases.getText())).intValue();
	if(nbCases<2){  
	    JOptionPane.showMessageDialog(fenetre, "Il faut au minimum deux cases");
	}
	//si le nombre de case est OK
	else{
	    if(nbCases>20){  
		JOptionPane.showMessageDialog(fenetre, "Il faut au maximum 20 cases");
	    }
	    else{
		JLabel consigne = new JLabel("Consigne");
		champConsigne = new TextField("L'énoncé de l'exercice",150);
		consigne.setBounds(new Rectangle(40,0,100,20));
		champConsigne.setBounds(new Rectangle(150,0,350,20));
		panelBas.add(consigne);
		panelBas.add(champConsigne);
		consigne.validate();
		champConsigne.validate();
		
		x=30;
		y=0;
		JRadioButton[] mesBox = new JRadioButton[nbCases];
		mesTexteFields= new TextField[nbCases];
		RadioListener myListener = new RadioListener();
		for (int i =0; i<nbCases; i++){
		    mesBox[i]=new JRadioButton(""+i);
		    mesBox[i].setActionCommand(""+i);
		    mesBox[i].addActionListener(myListener);
		    mesTexteFields[i]= new TextField("enoncé"+i,150);
		    group.add(mesBox[i]);
		}
		mesBox[0].setSelected(true);
		for(int j=0; j<nbCases; j++){
		    if(j%2==0){
			x=50;
			y=y+60;
		    }
		    else{
			x=x+400;
		    }
		    panelBas.add(mesTexteFields[j],null);
		    mesTexteFields[j].validate();
		    panelBas.add(mesBox[j],null);
		    mesBox[j].validate();
		    mesTexteFields[j].setBounds(new Rectangle(x,y,300,30));
		    mesTexteFields[j].setBackground(Color.blue);
		    mesTexteFields[j].setFont(new java.awt.Font("Comic Sans MS", 1, 20));
		    mesTexteFields[j].setForeground(new Color (255, 220, 56));
		    mesBox[j].setBounds(new Rectangle(x+310,y,50,50));
		}
		
		JButton boutonValide = new JButton("Valider la question");
		
		boutonValideExo.setEnabled(true);
		boutonValide.setBounds(new Rectangle(40,y+60,250,50));
		boutonValide.setBackground(new Color (186, 198, 230));
		boutonValide.setFont(new java.awt.Font("Arial", 1, 15));
		panelBas.add(boutonValide,null);
		
		boutonValide.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
			    valideQuestion();
				    
			}
				}
					       );
		panelBas.revalidate();
		panelBas.repaint();
		
	    }
	}
    }
	




    public void valideQuestion(){
	if(listeNiveau.getSelectedItem().equals("niveau")){
	    JOptionPane.showMessageDialog(fenetre,"Vous devez choisir un niveau");
	}
	else{
	    listeNiveau.setEnabled(false);
	    boutonValideExo.setEnabled(true);
	    chaine="";
	    nbQuestion+=1;
	    int num=(new Integer(questionSelected)).intValue();
	    chaine+=champConsigne.getText()+";";
	    chaine+=mesTexteFields[num].getText()+";";
	    for(int k=0; k<nbCases; k++){
		if(k==nbCases-1){
		    chaine+=mesTexteFields[k].getText();
		}
		else{
		    chaine+=mesTexteFields[k].getText()+";";
		}
	    }
	    question.add(chaine);
	    panelBas.removeAll();
	    panelBas.revalidate();
	    panelBas.repaint();
	    
	}
    }



    public void valideExo(){
	if(champTitre.getText().equals("")){
	    JOptionPane.showMessageDialog(fenetre,"Vous devez renter un titre");
	}
	else{
	    try{
		File rep = new File("exercice/orth");
		String fileName = "exercice/orth/"+champTitre.getText()+"_"+listeNiveau.getSelectedIndex()+".txt";
		File file = new File(fileName);
		if(file.exists()){
		    JOptionPane.showMessageDialog(fenetre,"Cet exercice existe déjà pour le même niveau de difficulté, changer votre titre");
		}
		else{
		    champTitre.setEnabled(false);
		    boolean isCreateFile = file.createNewFile();
		    if(!isCreateFile){
			System.out.println("Erreur de création du fichier pour l'utilisateur");
		    } 
		    else{
			PrintStream fichier = new PrintStream(new FileOutputStream(fileName));
			fichier.println(champTitre.getText());
			fichier.println(champTitre.getText()+"_"+listeNiveau.getSelectedIndex()+".txt");
			fichier.println(listeNiveau.getSelectedIndex());
			fichier.println(""+nbQuestion);
			for (Iterator i =question.iterator(); i.hasNext(); ){
			    fichier.println(i.next());
			    fichier.println("////");
			}
			JOptionPane.showMessageDialog(fenetre,"Votre exercice a été créé avec succès, vous pouvez le visualiser dans la liste des exercice");
			inter.creeListeExo();
			fenetre.dispose();
		    }
		    
		}
	    }
	    catch(IOException err){
		System.out.println("Erreur de fichier");	
	    }   
	}
    }
    
    public static void main(String[] args){
	CreeExoOrth1 test = new CreeExoOrth1(new  Educatemps());
	test.inter();
    }
}

