import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.awt.event.*;
import java.io.*;
import java.util.StringTokenizer;

public class CreeExoDrag1 extends CreeExercice{	
    Vector question = new Vector();
    Frame fenetre; 
    Vector donnees = new Vector();
    JTable table;
    Vector donnees_questions=new Vector();
    JCheckBox[] mesBox; 
    int nbLabelsVides=0;
    String niveau;
    JPanel panel;
    JPanel panelBas;
    JPanel panelPrincipal;
    int x=50;
    int y=140;
    String questionSelected="0";
    JLabel labelNiveau = new JLabel("Le niveau de l'exercice");
    Choice listeNiveau = new Choice();
    TextField[] mesTexteFields;
    TextField champNbCases;
    TextField champConsigne;
    TextField champProposition;
    int nbCases;
    int nbPropositions;
    TextField champTitre;
    int nbQuestion=0;
   JScrollPane scroll;
    Educatemps inter;
    JLabel labelProposition;
    JButton boutonValideExo;
    public CreeExoDrag1( Educatemps i){
	inter = i;
	fenetre = new Frame("Création d'exercices");
	fenetre.addWindowListener(new WindowAdapter(){
		public void windowClosing(WindowEvent e){
		    fenetre.dispose();
		}
	    }
				  );
	Dimension tailleEcran = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
	int hauteur = (int)tailleEcran.getHeight();
	int largeur = (int)tailleEcran.getWidth();
	panel = new JPanel();
	panelBas = new JPanel();
	panelPrincipal = new JPanel();
	panel.setLayout(null);
	panelBas.setLayout(null);
	panelPrincipal.setLayout(new BorderLayout());
	panelBas.setPreferredSize(new Dimension(largeur-10, 1200));
	panel.setPreferredSize(new Dimension(largeur-10, 300));
	panelPrincipal.add(panel,BorderLayout.NORTH);
	panelPrincipal.add(panelBas,BorderLayout.CENTER);
	scroll= new JScrollPane(panelPrincipal);
	fenetre.add(scroll);
	fenetre.setSize(largeur, hauteur-25);

	fenetre.show();
    }
    
  

    public String poseQuestion(String txt){
	return JOptionPane.showInputDialog(null,txt);
    }


   

    public void inter(){
	
	//la consigne
	JLabel instruction = new JLabel("<html><font color=red><b>Renter d'abord le nombre de cases (les réponses à trouver plus les mots déjà inscrits).\n Ensuite rentrer le nombre de propositions pour les réponses.\n Vous n'avez plus qu'a completer les cases et propositions. Cliquer sur les checkbox à coté des cases pour signaler que ce sera les textes manquants</b></font></html>");
	instruction.setBounds(new Rectangle(10,10,550,100));
	//panel.add(instruction);
	//le niveau de l'exercice
//le nombre de propositions
	champProposition =  new TextField("0",30);
	champProposition.setBounds(new Rectangle(580,150,30,20));
	labelProposition = new JLabel("Rentrer le nombre de propositions");
	labelProposition.setBounds(new Rectangle(370,150,200,20));

	labelNiveau.setBounds(new Rectangle(40,120,200,20));
	panel.add(labelNiveau,null);
	listeNiveau.addItem("niveau");
	listeNiveau.addItem("Facile");
	listeNiveau.addItem("Moyen");
	listeNiveau.addItem("Difficile");
	listeNiveau.addItemListener(new ItemListener(){
		public void itemStateChanged(ItemEvent e){
		    if(listeNiveau.getSelectedItem().equals("Difficile")){
			System.out.println("yes");
			panel.remove(champProposition);
			panel.remove(labelProposition);
			panel.revalidate();
			panel.repaint();
		    }
		    else{
			panel.remove(champProposition);
			panel.remove(labelProposition);
			panel.add(labelProposition);
			panel.add(champProposition);
			panel.revalidate();
			panel.repaint();
		    }
		}
	    }
				    );

	listeNiveau.setBounds(new Rectangle(250,120,150,20));
	panel.add(listeNiveau,null);

	//le nombre de cases
	champNbCases =  new TextField("0",30);
	champNbCases.setBounds(new Rectangle(250,150,30,20));
	JLabel labelNbCases = new JLabel("Rentrer le nombre de cases");
	labelNbCases.setBounds(new Rectangle(40,150,200,20));
	JButton boutonNbCases = new JButton("OK");
	boutonNbCases.setBounds(new Rectangle(680,150,70,20));
	
	
	//concernant le titre de l'exo
	JLabel titre = new JLabel("Rentrer le titre de l'exercice");
	champTitre = new TextField(50);
	titre.setBounds(new Rectangle(40,190,200,20));
	champTitre.setBounds(new Rectangle(250,190,250,20));
	
	panel.add(boutonNbCases);
	panel.add(labelNbCases);
	panel.add(champNbCases);
	panel.add(titre);	
	panel.add(champTitre);
	//panel.add(champProposition);
	panel.add(labelProposition);
	panelPrincipal.revalidate();
	panelPrincipal.repaint();
	scroll.revalidate();
	scroll.repaint();
	//panel.add(boutonProposition);
	final ButtonGroup group = new ButtonGroup();
	class RadioListener implements ActionListener { 
	    public void actionPerformed(ActionEvent e) {
		questionSelected = e.getActionCommand();
	    }
	}

	
	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(750,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);
	boutonValideExo.addActionListener(new ActionListener(){
			    public void actionPerformed(ActionEvent e){
				valideExo();
			    }
	    }
					  );
	panel.revalidate();
	panel.repaint();
    }
    
    public void valideCase(){
	if(listeNiveau.getSelectedItem().equals("niveau")){
	    JOptionPane.showMessageDialog(fenetre,"Vous devez choisir un niveau pour l'exercice");
	}
	else{
	    listeNiveau.setEnabled(false);
	    panelBas.removeAll();  
	    panelBas.revalidate();
	    panelBas.repaint();
	    panelPrincipal.revalidate();
	    panelPrincipal.repaint();
	    scroll.revalidate();
	    scroll.repaint();
	    nbPropositions = (new Integer(champProposition.getText())).intValue();
	    nbCases=(new Integer(champNbCases.getText())).intValue();
	    if(nbCases<2){  
		JOptionPane.showMessageDialog(fenetre, "Il faut au minimum deux cases");
	    }
	    else{
		if(nbCases>20){  
		    JOptionPane.showMessageDialog(fenetre, "Il faut au maximum 20 cases");
		}
		//si le nombre de case est OK
		else{
		    if((nbPropositions<2)&&(!(listeNiveau.getSelectedItem().equals("Difficile")))){  
			JOptionPane.showMessageDialog(fenetre, "Il faut au minimum deux propositions");
		    }
		    else{
			if(nbPropositions>20){  
			    JOptionPane.showMessageDialog(fenetre, "Il faut au maximum 20 propositions");
			}
			else{
			    
				//concernant la consigne de l'exercice
			    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);
			    
				//création de la JTable pour les propositions
			    String[][] data = new String[nbPropositions][1];
			    for(int n=0; n<nbPropositions; n++){
				data[n][0]="";
			    }
			    String[] nomColonne = new String[1];
			    nomColonne[0]="Les propositions";
			    table = new JTable(data,nomColonne);
			    table.setFont(new java.awt.Font("Comic Sans MS", 1, 20));
			    table.setBackground(new Color (240, 237, 129));
			    table.setRowHeight(50);
			    
			    JScrollPane scroll = new JScrollPane(table);
			    scroll.setBounds(new Rectangle(650,30,300,280));
			    if(!(listeNiveau.getSelectedItem().equals("Difficile"))){				    
				panelBas.add(scroll);
			    }
				//création des cases et des checkbox
			    x=100;
			    y=0;
			    mesBox = new JCheckBox[nbCases];
			    mesTexteFields= new TextField[nbCases];
			    for (int i =0; i<nbCases; i++){
				mesBox[i]=new JCheckBox(""+i);
				mesTexteFields[i]= new TextField("enoncé"+i,150);
			    }
				//positionnement des textfield et box
			    mesBox[0].setSelected(true);
			    for(int j=0; j<nbCases; j++){
				panelBas.add(mesTexteFields[j],null);
				panelBas.add(mesBox[j],null);
				mesTexteFields[j].setBounds(new Rectangle(x,y+=50,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+300,y,50,50));
			    }
			    
				//bouton pour valider une question
			    JButton boutonValide = new JButton("Valider la question");
			    boutonValide.setBounds(new Rectangle(675,335,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();
				    }
				}
							   
							   );
			}
		    }
		}
	    }
	}   
	
    }
    
    public void valideQuestion(){
	boutonValideExo.setEnabled(true);
	listeNiveau.setEnabled(false);
	//compte le nombre de labels qui seront vides
	nbLabelsVides=0;
	for(int i=0; i<nbCases; i++){
	    if(mesBox[i].isSelected()){
		nbLabelsVides+=1;
	    }
	}
	
	
	nbQuestion+=1;
	donnees_questions.add(champConsigne.getText());  //la consigne
	donnees_questions.add(""+nbCases);
	donnees_questions.add(""+nbLabelsVides);
	//pour les numeros des labels vides
	String positionLabelVide = "";
	for(int i=0; i<nbCases; i++){
	    if(mesBox[i].isSelected()){
		positionLabelVide+=(i+1)+";";
	    }
	}
	donnees_questions.add(positionLabelVide);
	//les labels remplis et leurs positions
	String labelsRemplis="";
	for(int i=0; i<nbCases; i++){
	    if(!(mesBox[i].isSelected())){
		labelsRemplis+=mesTexteFields[i].getText()+";"+(i+1)+";";
	    }
	}
	donnees_questions.add(labelsRemplis);
	//les propositions
	String lesPropositions="";
	for(int i=0; i<nbPropositions; i++){
	    lesPropositions+=table.getValueAt(i,0)+";";
	}
	donnees_questions.add(lesPropositions);
	//les reponses
	String rep="";
	for(int i=0; i<nbCases; i++){
	    if((mesBox[i].isSelected())){
		rep+=mesTexteFields[i].getText()+";"+(i+1)+";";
	    }
	}
	donnees_questions.add(rep);
	donnees_questions.add("////");
	panelBas.removeAll();
	panelBas.revalidate();
	panelBas.repaint();
    }



    public void valideExo(){
	if(champTitre.getText().equals("")){
	    JOptionPane.showMessageDialog(fenetre,"Vous devez mettre un titre à l'exercice");
	}
	else{
	    try{
		File rep = new File("exercice/drag");
		String fileName = "exercice/drag/"+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 =donnees_questions.iterator(); i.hasNext(); ){
			    fichier.println(i.next());
			}
			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){
	CreeExoDrag1 test = new CreeExoDrag1(new  Educatemps());
	test.inter();
    }
}

