diff --git a/res/stages/data-view-stage.fxml b/res/stages/data-view-stage.fxml
index 7adaf2e98d4a5a148fa0e36cdce53bb08f9e63ca..6ad4174e2246a0cc5d9f52d375431df8d5f87762 100644
--- a/res/stages/data-view-stage.fxml
+++ b/res/stages/data-view-stage.fxml
@@ -1,20 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<?import javafx.geometry.*?>
-<?import javafx.scene.*?>
-<?import javafx.scene.chart.*?>
-<?import javafx.scene.control.*?>
-<?import javafx.scene.image.*?>
-<?import javafx.scene.layout.*?>
-<?import javafx.scene.text.*?>
-<?import javafx.stage.*?>
+<?import javafx.geometry.Insets?>
+<?import javafx.scene.Scene?>
+<?import javafx.scene.chart.NumberAxis?>
+<?import javafx.scene.chart.ScatterChart?>
+<?import javafx.scene.control.Button?>
+<?import javafx.scene.control.Label?>
+<?import javafx.scene.image.Image?>
+<?import javafx.scene.image.ImageView?>
+<?import javafx.scene.layout.AnchorPane?>
+<?import javafx.scene.layout.HBox?>
+<?import javafx.scene.layout.Region?>
+<?import javafx.scene.layout.VBox?>
+<?import javafx.scene.text.Font?>
+<?import javafx.stage.Stage?>
 
-<Stage fx:id="stage" xmlns="http://javafx.com/javafx/17.0.12" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fr.univlille.sae.classification.controller.DataStageController">
+<Stage fx:id="stage" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fr.univlille.sae.classification.controller.DataStageController">
     <scene>
         <Scene>
-            <AnchorPane prefHeight="487.0" prefWidth="692.0">
+            <AnchorPane prefHeight="380.0" prefWidth="692.0">
             <children>
-               <VBox prefHeight="488.0" prefWidth="691.0">
+               <VBox prefHeight="399.0" prefWidth="691.0">
                   <children>
                      <HBox alignment="TOP_CENTER" prefHeight="356.0" prefWidth="691.0" spacing="5.0">
                         <children>
@@ -52,11 +58,6 @@
                             </Button>
                         </children>
                      </HBox>
-                     <HBox alignment="CENTER" prefHeight="169.0" prefWidth="691.0" spacing="50.0">
-                        <children>
-                           <Button fx:id="classifyData" disable="true" mnemonicParsing="false" onAction="#classifyDatas" prefHeight="26.0" prefWidth="157.0" text="Classifier les données" />
-                        </children>
-                     </HBox>
                   </children>
                </VBox>
             </children></AnchorPane>
diff --git a/res/stages/display-settings-stage.fxml b/res/stages/display-settings-stage.fxml
deleted file mode 100644
index acc017fdecae5194a5efd858edf264166d7723df..0000000000000000000000000000000000000000
--- a/res/stages/display-settings-stage.fxml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<?import javafx.scene.*?>
-<?import javafx.scene.control.*?>
-<?import javafx.scene.layout.*?>
-<?import javafx.stage.*?>
-
-<Stage  fx:id="stage" xmlns="http://javafx.com/javafx/17.0.12" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fr.univlille.sae.classification.controller.DisplaySettingsController">
-    <scene>
-        <Scene>
-            <AnchorPane prefHeight="200" prefWidth="200">
-            <children>
-               <VBox alignment="CENTER" layoutY="1.0" prefHeight="292.0" prefWidth="438.0" spacing="30.0">
-                  <children>
-                     <HBox alignment="CENTER" prefHeight="58.0" prefWidth="294.0" spacing="20.0">
-                        <children>
-                           <Label text="Nouvel ajout" />
-                           <ColorPicker fx:id="addColor" editable="true" />
-                        </children></HBox>
-                     <Button fx:id="confirmSettings" mnemonicParsing="false" text="Valider" />
-                  </children></VBox>
-            </children></AnchorPane>
-        </Scene>
-    </scene>
-</Stage>
diff --git a/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java b/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java
index ea7510eb725f6d9df947505259c4bba0f4c68d32..f2b44f3f9084fdd4c70e470e6218c77585849586 100644
--- a/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java
+++ b/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java
@@ -3,7 +3,8 @@ package fr.univlille.sae.classification.controller;
 import fr.univlille.sae.classification.model.ClassificationModel;
 import fr.univlille.sae.classification.view.MainStageView;
 import javafx.fxml.FXML;
-import javafx.scene.control.*;
+import javafx.scene.control.Spinner;
+import javafx.scene.control.SpinnerValueFactory;
 import javafx.stage.Stage;
 
 import java.io.IOException;
@@ -16,9 +17,6 @@ public class AddDataController {
     @FXML
     private Stage stage;
 
-    @FXML
-    private Button confirmAdd;
-
     @FXML
     private Spinner<Double> sepalLengthSpinner;
 
@@ -41,6 +39,7 @@ public class AddDataController {
      */
     @FXML
     public void initialize() {
+
         sepalLengthSpinner.setValueFactory(new SpinnerValueFactory.DoubleSpinnerValueFactory(0.0, 200.0, 3.0,0.1));
         sepalWidthSpinner.setValueFactory(new SpinnerValueFactory.DoubleSpinnerValueFactory(0.0, 200.0, 3.0, 0.1));
         petalLengthSpinner.setValueFactory(new SpinnerValueFactory.DoubleSpinnerValueFactory(0.0, 200.0, 3.0, 0.1));
@@ -61,11 +60,10 @@ public class AddDataController {
     public void setMainStageView(MainStageView mainStageView) {
         this.mainStageView = mainStageView;
     }
-
     /**
      * Validation des données à ajouter
      */
-    public void validate() throws IOException {
+    public void validate() {
         System.out.println("validé");
         mainStageView.getController().getClassifyData().setDisable(false);
 
diff --git a/src/main/java/fr/univlille/sae/classification/controller/AxesSettingsController.java b/src/main/java/fr/univlille/sae/classification/controller/AxesSettingsController.java
index c04f311d882ce64c4894ffce206ef565a7c9fccd..88b726cd126eba3e81c11d587905bfb035586b91 100644
--- a/src/main/java/fr/univlille/sae/classification/controller/AxesSettingsController.java
+++ b/src/main/java/fr/univlille/sae/classification/controller/AxesSettingsController.java
@@ -1,6 +1,5 @@
 package fr.univlille.sae.classification.controller;
 
-import fr.univlille.sae.classification.model.ClassificationModel;
 import fr.univlille.sae.classification.view.DataVisualizationView;
 import javafx.fxml.FXML;
 import javafx.scene.control.Button;
@@ -20,8 +19,6 @@ public class AxesSettingsController{
     @FXML
     ChoiceBox selectAbs;
 
-    @FXML
-    Button confirmAxes;
 
     /**
      * DataVisualizationView associé au controlleur
diff --git a/src/main/java/fr/univlille/sae/classification/controller/DataStageController.java b/src/main/java/fr/univlille/sae/classification/controller/DataStageController.java
index 926b167a478fe71ead37aaab5e91df1e82e400f8..acc6a45394c82e88bba20c100a3ee967a80a620c 100644
--- a/src/main/java/fr/univlille/sae/classification/controller/DataStageController.java
+++ b/src/main/java/fr/univlille/sae/classification/controller/DataStageController.java
@@ -1,11 +1,10 @@
 package fr.univlille.sae.classification.controller;
 
 import fr.univlille.sae.classification.model.ClassificationModel;
-import fr.univlille.sae.classification.view.*;
+import fr.univlille.sae.classification.view.AxesSettingsView;
+import fr.univlille.sae.classification.view.DataStageView;
 import javafx.fxml.FXML;
-import javafx.scene.chart.NumberAxis;
 import javafx.scene.chart.ScatterChart;
-import javafx.scene.control.Button;
 import javafx.scene.control.Label;
 import javafx.stage.Stage;
 
@@ -18,9 +17,6 @@ public class DataStageController {
     @FXML
     Stage stage;
 
-    @FXML
-    Button classifyData;
-
     @FXML
     ScatterChart scatterChart;
 
@@ -34,6 +30,7 @@ public class DataStageController {
 
     /**
      * Ouvrir les paramètres des axes de la vue
+     * @throws IOException
      */
     public void openAxesSetting()throws IOException {
         AxesSettingsView axesSettingsView = new AxesSettingsView(ClassificationModel.getClassificationModel(), stage, dataStageView);
@@ -49,11 +46,6 @@ public class DataStageController {
     }
 
 
-    public void classifyDatas() {
-        ClassificationModel.getClassificationModel().classifierDonnees();
-        classifyData.setDisable(true);
-    }
-
     /**
      * Renvoie la grille associé à la classe
      * @return grille de la classe
diff --git a/src/main/java/fr/univlille/sae/classification/controller/DisplaySettingsController.java b/src/main/java/fr/univlille/sae/classification/controller/DisplaySettingsController.java
deleted file mode 100644
index 203a5ae46369368f57485f3db4a120b7c69517cd..0000000000000000000000000000000000000000
--- a/src/main/java/fr/univlille/sae/classification/controller/DisplaySettingsController.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package fr.univlille.sae.classification.controller;
-
-import javafx.fxml.FXML;
-import javafx.scene.control.Button;
-import javafx.scene.control.ColorPicker;
-import javafx.stage.Stage;
-
-public class DisplaySettingsController {
-    @FXML
-    Stage stage;
-
-    @FXML
-    Button confirmSettings;
-
-    @FXML
-    ColorPicker addColor;
-
-
-}
diff --git a/src/main/java/fr/univlille/sae/classification/controller/LoadDataController.java b/src/main/java/fr/univlille/sae/classification/controller/LoadDataController.java
index 8ca5ee8a174d784f074ca2af58dbd5f818469b30..b0009cecf85c5c2900d539b11ffe04ba4a64ff6e 100644
--- a/src/main/java/fr/univlille/sae/classification/controller/LoadDataController.java
+++ b/src/main/java/fr/univlille/sae/classification/controller/LoadDataController.java
@@ -4,7 +4,6 @@ import fr.univlille.sae.classification.model.ClassificationModel;
 import javafx.fxml.FXML;
 import javafx.scene.control.Alert;
 import javafx.scene.control.Button;
-import javafx.scene.control.Label;
 import javafx.scene.control.TextField;
 import javafx.stage.FileChooser;
 import javafx.stage.Stage;
@@ -18,11 +17,6 @@ public class LoadDataController {
     @FXML
     Stage stage;
 
-    @FXML
-    Button browseFile;
-
-    @FXML
-    Button confirmDataSelection;
 
     @FXML
     TextField filePath;
@@ -51,7 +45,7 @@ public class LoadDataController {
      */
     public void validate() throws IOException {
 
-        if (file == null) {
+        if (file == null || file.isDirectory() || !file.exists()) {
             Alert alert = new Alert(Alert.AlertType.ERROR);
             alert.setTitle("Erreur de chargement du fichier");
             alert.setHeaderText(null);
@@ -60,8 +54,8 @@ public class LoadDataController {
             alert.showAndWait();
             openFileChooser();
             return;
-            //throw exception
         }
+
         ClassificationModel.getClassificationModel().loadData(file);
         stage.close();
     }
diff --git a/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java b/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java
index 4013b83d1e65bbc29004d92aee1c452da56409f0..9b468c2296dce5d90765c04ea35bc34f9119532d 100644
--- a/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java
+++ b/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java
@@ -3,12 +3,10 @@ package fr.univlille.sae.classification.controller;
 import fr.univlille.sae.classification.model.ClassificationModel;
 import fr.univlille.sae.classification.view.*;
 import javafx.fxml.FXML;
-
-import javafx.scene.chart.*;
+import javafx.scene.chart.ScatterChart;
 import javafx.scene.control.Button;
 import javafx.scene.control.Label;
-import javafx.stage.*;
-
+import javafx.stage.Stage;
 
 import java.io.IOException;
 
@@ -19,20 +17,7 @@ public class MainStageController {
     @FXML
     Stage stage;
 
-    @FXML
-    NumberAxis absAxe;
-
-    @FXML
-    NumberAxis ordAxe;
-
-    @FXML
-    Button settings;
 
-    @FXML
-    Button loadData;
-
-    @FXML
-    Button addData;
 
     @FXML
     Button classifyData;
@@ -44,7 +29,6 @@ public class MainStageController {
     Label AxesSelected;
 
 
-    Stage loadStage;
     private MainStageView mainStageView;
 
     /**
diff --git a/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java b/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java
index 8e5f9f110d98f6a657aa882db786ec2ad320cfac..86d57ff5db5742371bf80d64c7955af3ec48c46f 100644
--- a/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java
+++ b/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java
@@ -3,13 +3,10 @@ package fr.univlille.sae.classification.model;
 import com.opencsv.bean.CsvToBeanBuilder;
 import fr.univlille.sae.classification.utils.Observable;
 
-import javax.xml.crypto.Data;
 import java.io.File;
 import java.io.IOException;
 import java.nio.file.Files;
-import java.nio.file.Paths;
 import java.util.*;
-import java.util.concurrent.ConcurrentSkipListSet;
 import java.util.concurrent.CopyOnWriteArrayList;
 
 
@@ -88,7 +85,7 @@ public class ClassificationModel extends Observable {
      */
     private void classifierDonnee(LoadableData data) {
 
-        List<String> classes = new ArrayList<>(data.getClassificationTypes());
+        List<String> classes = new ArrayList<>(LoadableData.getClassificationTypes());
         Random rdm = new Random();
         data.setClassification(classes.get(rdm.nextInt(classes.size())));
         notifyObservers(data);
diff --git a/src/main/java/fr/univlille/sae/classification/model/Iris.java b/src/main/java/fr/univlille/sae/classification/model/Iris.java
index f71fe890c7154f3d7fae2ecffbc335d13db71fe6..4e6686907b00d59aacd2c232d209980bf514fe6a 100644
--- a/src/main/java/fr/univlille/sae/classification/model/Iris.java
+++ b/src/main/java/fr/univlille/sae/classification/model/Iris.java
@@ -1,10 +1,8 @@
 package fr.univlille.sae.classification.model;
 
-import com.opencsv.bean.*;
+import com.opencsv.bean.CsvBindByName;
 import javafx.scene.paint.Color;
 
-import java.util.Random;
-
 public class Iris extends LoadableData{
 
 
@@ -91,13 +89,12 @@ public class Iris extends LoadableData{
     }
 
     public String[] getAttributesName() {
-        String[] names = new String[]{
+        return new String[]{
                 "sepalLength",
                 "sepalWidth",
                 "petalLength",
                 "petalWidth"
         };
-        return names;
     }
 
     @Override
diff --git a/src/main/java/fr/univlille/sae/classification/model/LoadableData.java b/src/main/java/fr/univlille/sae/classification/model/LoadableData.java
index 83c23f00cc9202da68c9fe9f12b9037f1f46c77b..28b6b9d4675bf85498238dbfd63924f2528b65df 100644
--- a/src/main/java/fr/univlille/sae/classification/model/LoadableData.java
+++ b/src/main/java/fr/univlille/sae/classification/model/LoadableData.java
@@ -12,10 +12,6 @@ public abstract class LoadableData {
 
     }
 
-    public void addClassification(String classificationType) {
-        this.classificationTypes.add(classificationType);
-    }
-
     public abstract String getClassification() ;
 
     public static Set<String> getClassificationTypes() {
diff --git a/src/main/java/fr/univlille/sae/classification/view/DataStageView.java b/src/main/java/fr/univlille/sae/classification/view/DataStageView.java
index 57b5e6d351ad34b71bbc61145522ad2df340029f..1d3c3f1109e9f79afd466a1a4e7cdac5902d0d7f 100644
--- a/src/main/java/fr/univlille/sae/classification/view/DataStageView.java
+++ b/src/main/java/fr/univlille/sae/classification/view/DataStageView.java
@@ -7,12 +7,14 @@ import fr.univlille.sae.classification.model.Iris;
 import fr.univlille.sae.classification.model.LoadableData;
 import fr.univlille.sae.classification.utils.Observable;
 import fr.univlille.sae.classification.utils.Observer;
+import javafx.collections.ObservableList;
 import fr.univlille.sae.classification.utils.ViewUtil;
 import javafx.fxml.FXMLLoader;
-import javafx.scene.chart.ScatterChart;
 import javafx.scene.chart.XYChart;
 import javafx.scene.shape.Circle;
 import javafx.scene.shape.Rectangle;
+import javafx.scene.shape.Shape;
+import javafx.scene.shape.Rectangle;
 import javafx.stage.Stage;
 
 import java.io.File;
@@ -25,10 +27,22 @@ public class DataStageView extends DataVisualizationView implements Observer {
 
     private ClassificationModel model;
     private DataStageController controller;
+
+
+    private XYChart.Series series1 ;
+    private XYChart.Series series2 ;
+    private XYChart.Series series3 ;
+    private XYChart.Series series4 ;
+
     private Stage root;
 
     public DataStageView(ClassificationModel model) {
+        super();
         this.model = model;
+        this.series1 = new XYChart.Series();
+        this.series2 = new XYChart.Series();
+        this.series3 = new XYChart.Series();
+        this.series4 = new XYChart.Series();
         model.attach(this);
     }
 
@@ -38,19 +52,26 @@ public class DataStageView extends DataVisualizationView implements Observer {
         try {
             URL fxmlFileUrl = new File(System.getProperty("user.dir") + File.separator + "res" + File.separator + "stages" + File.separator + "data-view-stage.fxml").toURI().toURL();
 
-            if (fxmlFileUrl == null) {
-                System.out.println("Impossible de charger le fichier fxml");
-                System.exit(-1);
-            }
-            loader.setLocation(fxmlFileUrl);
-            root = loader.load();
-            root.setResizable(false);
-            root.setTitle("SAE3.3 - Logiciel de classification");
-            root.show();
-            controller = loader.getController();
-            controller.setDataStageView(this);
-            scatterChart = controller.getScatterChart();
-            controller.setAxesSelected("Aucun fichier sélectionné");
+        if (fxmlFileUrl == null) {
+            System.out.println("Impossible de charger le fichier fxml");
+            System.exit(-1);
+        }
+        loader.setLocation(fxmlFileUrl);
+        root = loader.load();
+        root.setResizable(false);
+        root.setTitle("SAE3.3 - Logiciel de classification");
+        root.show();
+        loader.getController();
+        controller = loader.getController();
+        controller.setDataStageView(this);
+        scatterChart = controller.getScatterChart();
+
+        scatterChart.getData().addAll(series4, series1, series2, series3 );
+
+
+
+        System.out.println("DataStageView scatter chart: " +scatterChart);
+        controller.setAxesSelected("Aucun fichier sélectionné");
 
             if (!model.getDatas().isEmpty()) {
                 update(model);
@@ -70,51 +91,61 @@ public class DataStageView extends DataVisualizationView implements Observer {
             // On vide le nuage pour s'assurer qu'il est bien vide
             scatterChart.getData().clear();
 
-            // Jalon 1: on vérifie que le type de donnée est bien IRIS
-            if (model.getType() == DataType.IRIS) {
-                XYChart.Series<Double, Double> series1 = new XYChart.Series<>();
-                XYChart.Series<Double, Double> series2 = new XYChart.Series<>();
-                XYChart.Series<Double, Double> series3 = new XYChart.Series<>();
-                if (actualX == null && actualY == null) {
-                    controller.setAxesSelected("Aucuns axes sélectionnés");
-                } else {
-                    controller.setAxesSelected("");
-                    // On récupère les données du modèle
-                    List<LoadableData> points = new ArrayList<>(model.getDatas());
-                    points.addAll(model.getDataToClass());
-                    // On ajoute chaque point à la série
-                    for (LoadableData i : points) {
-                        Iris iris = (Iris) i;
-                        XYChart.Data<Double, Double> dataPoint = new XYChart.Data<>(
-                                iris.getDataType(actualX),
-                                iris.getDataType(actualY)
-                        );
+
+
+        //Jalon 1: on verifie que le type de donnée est bien IRIS
+        if(model.getType() == DataType.IRIS) {
+            if(actualX==null && actualY==null){
+                controller.setAxesSelected("Aucuns axes sélectionnés");
+            }
+            else{
+                controller.setAxesSelected("");
+
+                //On recupere les données du model
+                List<LoadableData> points = new ArrayList<>(model.getDatas());
+                points.addAll(model.getDataToClass());
+                // on ajoute chaque point a la serie
+                for(LoadableData i : points) {
+
+                    Iris iris = (Iris)i;
+                    XYChart.Data<Double, Double> dataPoint = new XYChart.Data<>(iris.getDataType(actualX),
+                            iris.getDataType(actualY));
 
                         dataPoint.setNode(ViewUtil.getForm(iris, new Circle(5), root));
 
-                        switch (iris.getClassification()) {
-                            case "Setosa":
-                                series1.getData().add(dataPoint);
-                                break;
-                            case "Versicolor":
-                                series2.getData().add(dataPoint);
-                                break;
-                            case "Virginica":
-                                series3.getData().add(dataPoint);
-                                break;
-                        }
+                    switch (iris.getClassification()) {
+                        case "Setosa":
+                            series1.getData().add(dataPoint);
+                            break;
+                        case "Versicolor":
+                            series2.getData().add(dataPoint);
+                            break;
+                        case "Virginica":
+                            series3.getData().add(dataPoint);
+                            break;
+                        default:
+                            dataPoint.setNode(getForm(iris, new Rectangle(10, 10)));
+                            series4.getData().add(dataPoint);
+                            break;
                     }
 
+
                     series1.setName("Setosa");
                     series2.setName("Versicolor");
                     series3.setName("Virginica");
+                    series4.setName("undefinied");
 
                     scatterChart.getData().addAll(series1, series2, series3);
                 }
             }
+
+    }
         } catch (Exception e) {
             System.err.println("Erreur de mise à jour : " + e.getMessage());
         }
+
+
+
     }
 
     @Override
@@ -135,12 +166,11 @@ public class DataStageView extends DataVisualizationView implements Observer {
                         iris.getDataType(actualY)
                 );
 
-                dataPoint.setNode(ViewUtil.getForm(iris, new Rectangle(10, 10), root));
-                if (!scatterChart.getData().isEmpty()) {
-                    XYChart.Series<Double, Double> series = (XYChart.Series<Double, Double>) scatterChart.getData().get(0);
-                    series.getData().add(dataPoint);
-                }
+            dataPoint.setNode(ViewUtil.getForm(iris, new Rectangle(10, 10)));
+            if (!scatterChart.getData().isEmpty()) {
+                series4.getData().add(dataPoint);
             }
+        }
         } catch (Exception e) {
             System.err.println("Erreur de mise à jour : " + e.getMessage());
         }
diff --git a/src/main/java/fr/univlille/sae/classification/view/MainStageView.java b/src/main/java/fr/univlille/sae/classification/view/MainStageView.java
index a429e235d6cc6f2e5cb3ca6926aa58f3959436e3..daf7d8cf99b39d8e13dd69d4de808745ff20bd5a 100644
--- a/src/main/java/fr/univlille/sae/classification/view/MainStageView.java
+++ b/src/main/java/fr/univlille/sae/classification/view/MainStageView.java
@@ -1,6 +1,5 @@
 package fr.univlille.sae.classification.view;
 
-import fr.univlille.sae.classification.controller.LoadDataController;
 import fr.univlille.sae.classification.controller.MainStageController;
 import fr.univlille.sae.classification.model.ClassificationModel;
 import fr.univlille.sae.classification.model.DataType;
@@ -10,13 +9,14 @@ import fr.univlille.sae.classification.utils.Observable;
 import fr.univlille.sae.classification.utils.Observer;
 import fr.univlille.sae.classification.utils.ViewUtil;
 import javafx.application.Application;
+import javafx.collections.ObservableList;
 import javafx.fxml.FXML;
 import javafx.fxml.FXMLLoader;
-import javafx.scene.chart.ScatterChart;
 import javafx.scene.chart.XYChart;
+import javafx.scene.control.Alert;
+import javafx.scene.control.ButtonType;
 import javafx.scene.control.ContextMenu;
 import javafx.scene.control.MenuItem;
-import javafx.scene.paint.Color;
 import javafx.scene.shape.Circle;
 import javafx.scene.shape.Rectangle;
 import javafx.scene.shape.Shape;
@@ -25,7 +25,9 @@ import javafx.stage.Stage;
 import java.io.File;
 import java.io.IOException;
 import java.net.URL;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
 
 public class MainStageView extends DataVisualizationView implements Observer {
 
@@ -34,7 +36,18 @@ public class MainStageView extends DataVisualizationView implements Observer {
 
     private Stage root;
 
+    private XYChart.Series series1 ;
+    private XYChart.Series series2 ;
+    private XYChart.Series series3;
+    private XYChart.Series series4 ;
+
     public MainStageView(ClassificationModel model) {
+        super();
+        this.series1 = new XYChart.Series();
+        this.series2 = new XYChart.Series();
+        this.series3 = new XYChart.Series();
+        this.series4 = new XYChart.Series();
+
         this.model = model;
         model.attach(this);
     }
@@ -46,20 +59,37 @@ public class MainStageView extends DataVisualizationView implements Observer {
         try {
             URL fxmlFileUrl = new File(System.getProperty("user.dir") + File.separator + "res" + File.separator + "stages" + File.separator + "main-stage.fxml").toURI().toURL();
 
-            if (fxmlFileUrl == null) {
-                System.out.println("Impossible de charger le fichier fxml");
-                System.exit(-1);
+        if (fxmlFileUrl == null) {
+            System.out.println("Impossible de charger le fichier fxml");
+            System.exit(-1);
+        }
+        loader.setLocation(fxmlFileUrl);
+        root = loader.load();
+        root.setResizable(false);
+        root.setTitle("SAE3.3 - Logiciel de classification");
+        root.show();
+        root.setOnCloseRequest(event -> {
+            Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
+            alert.setTitle("Confirmation");
+            alert.setHeaderText("Voulez vous quitter l'application ?");
+            alert.setContentText("Aucunes modifications ne sera sauvegardé ! Les points qui ont été ajoutés ne seront pas sauvegardés");
+            Optional<ButtonType> optionalButtonType = alert.showAndWait();
+            if(optionalButtonType.isPresent() && optionalButtonType.get() == ButtonType.OK) {
+                System.exit(0);
+            }else {
+                event.consume();
             }
-            loader.setLocation(fxmlFileUrl);
-            root = loader.load();
-            root.setResizable(false);
-            root.setTitle("SAE3.3 - Logiciel de classification");
-            root.show();
-            loader.getController();
-            controller = loader.getController();
-            controller.setMainStageView(this);
-            scatterChart = controller.getScatterChart();
-            controller.setAxesSelected("Aucun fichier sélectionné");
+
+        });
+        loader.getController();
+        controller = loader.getController();
+        controller.setMainStageView(this);
+
+        scatterChart = controller.getScatterChart();
+        scatterChart.getData().addAll(series1, series2, series3);
+
+            System.out.println("DataStageView scatter chart: " +scatterChart );
+        controller.setAxesSelected("Aucun fichier sélectionné");
 
         } catch (IOException e) {
             System.err.println("Erreur lors du chargement du fichier FXML : " + e.getMessage());
@@ -75,17 +105,21 @@ public class MainStageView extends DataVisualizationView implements Observer {
                 System.err.println("Erreur de mise à jour.");
                 return;
             }
-            scatterChart.getData().clear();
-
-            //Jalon 1: on verifie que le type de donnée est bien IRIS
-            if (model.getType() == DataType.IRIS) {
-                XYChart.Series series1 = new XYChart.Series();
-                XYChart.Series series2 = new XYChart.Series();
-                XYChart.Series series3 = new XYChart.Series();
-                if (actualX == null && actualY == null) {
-                    controller.setAxesSelected("Aucuns axes sélectionnés");
-                } else {
-                    controller.setAxesSelected("");
+
+            ObservableList<XYChart.Series> series = scatterChart.getData();
+            for(XYChart.Series serie : series) {serie.getData().clear();}
+
+
+
+        //Jalon 1: on verifie que le type de donnée est bien IRIS
+        if(model.getType() == DataType.IRIS) {
+
+
+            if(actualX==null && actualY==null){
+                controller.setAxesSelected("Aucuns axes sélectionnés");
+            }
+            else{
+                controller.setAxesSelected("");
 
                     List<LoadableData> points = new ArrayList<>(model.getDatas());
                     points.addAll(model.getDataToClass());
@@ -97,27 +131,37 @@ public class MainStageView extends DataVisualizationView implements Observer {
 
                         dataPoint.setNode(ViewUtil.getForm(iris, new Circle(5), root));
 
-                        if (iris.getClassification().equals("Setosa")) {
+                    switch (iris.getClassification()) {
+                        case "Setosa":
                             series1.getData().add(dataPoint);
-                        } else if (iris.getClassification().equals("Versicolor")) {
+                            break;
+                        case "Versicolor":
                             series2.getData().add(dataPoint);
-                        } else if (iris.getClassification().equals("Virginica")) {
+                            break;
+                        case "Virginica":
                             series3.getData().add(dataPoint);
-                        }
+                            break;
+                        default:
+                            series4.getData().add(dataPoint);
+                            break;
                     }
 
-                    series1.setName("Setosa");
-                    series2.setName("Versicolor");
-                    series3.setName("Virginica");
-
-                    scatterChart.getData().addAll(series1, series2, series3);
                 }
-            }
+
+                series1.setName("Setosa");
+                series2.setName("Versicolor");
+                series3.setName("Virginica");
+                series4.setName("undefinied");
+
+                  }
+        }
         }catch (Exception e) {
             System.err.println("Erreur de mise à jour : " + e.getMessage());
         }
     }
 
+
+
     @Override
     public void update(Observable observable, Object data) {
         try {