diff --git a/.idea/checkstyle-idea.xml b/.idea/checkstyle-idea.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0389c4061fbcb7eb3a408f1d5690e7125184ffd0
--- /dev/null
+++ b/.idea/checkstyle-idea.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CheckStyle-IDEA" serialisationVersion="2">
+    <checkstyleVersion>10.18.1</checkstyleVersion>
+    <scanScope>JavaOnly</scanScope>
+    <option name="thirdPartyClasspath" />
+    <option name="activeLocationIds" />
+    <option name="locations">
+      <list>
+        <ConfigurationLocation id="bundled-sun-checks" type="BUNDLED" scope="All" description="Sun Checks">(bundled)</ConfigurationLocation>
+        <ConfigurationLocation id="bundled-google-checks" type="BUNDLED" scope="All" description="Google Checks">(bundled)</ConfigurationLocation>
+      </list>
+    </option>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index ca0df7fff913a3a9907525b7218caaa5b2eb68c0..699a522f7ccada5ab5aa11cbe3dcfc6fc6edc881 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -11,5 +11,5 @@
   <component name="PDMPlugin">
     <option name="skipTestSources" value="false" />
   </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="openjdk-21" project-jdk-type="JavaSDK" />
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="21" project-jdk-type="JavaSDK" />
 </project>
\ No newline at end of file
diff --git a/src/main/java/org/petriNet/Arc.java b/src/main/java/org/petriNet/Arc.java
index d0c94fc49d206d8977e9b6e8535a6ada93b8629a..c9d30fabf32e88fb7b8a77d83719fdaf8b527992 100644
--- a/src/main/java/org/petriNet/Arc.java
+++ b/src/main/java/org/petriNet/Arc.java
@@ -1,29 +1,36 @@
 package org.petriNet;
 
-public class Arc {
-    protected int poid;  
-    protected int id;
-
-    public Arc(int poid,int id) {
-        this.poid = poid;
+public abstract class Arc {
+    private int id;
+    private Place place;
+    private Transition transition;
+    private int poids;
+
+    public Arc(Place place, Transition transition, int poids, int id) {
+        this.place = place;
+        this.transition = transition;
+        this.poids = poids;
         this.id = id;
     }
 
-    public void modifier_poid(int nouveauPoid) {
-        this.poid = nouveauPoid;
-    }
 
-    public boolean valider() {
-        return true;
-    }
+    public abstract void modifierPoids(int poids);
 
-    public int getPoid() {
-        return poid;
-    }
+    public abstract void valider();
 
-    public void setPoid(int poid) {
-        this.poid = poid;
-    }
+    public abstract int getPoids() ;
+
+    public abstract int getId();
+
+    public abstract void setId(int id);
+
+    public abstract void setPoid(int poids);
+
+    public abstract Place getPlace();
+
+    public abstract void setPlace(Place place);
+
+    public abstract Transition getTransition();
 }
 
 
diff --git a/src/main/java/org/petriNet/Arc_ENTRANT.java b/src/main/java/org/petriNet/Arc_ENTRANT.java
index ced769aeaf3aab61ae0a9be43adf53883b18dbf5..9d0160765afb10d56e4c78c33afc9a196d9f3fe4 100644
--- a/src/main/java/org/petriNet/Arc_ENTRANT.java
+++ b/src/main/java/org/petriNet/Arc_ENTRANT.java
@@ -2,6 +2,10 @@ package org.petriNet;
 
 public class Arc_ENTRANT extends Arc {
 
+    private Place place;
+    private Transition transition;
+    private int poids;
+
     public Arc_ENTRANT(Place place, Transition transition, int poids) {
         super(place, transition, poids);
     }
@@ -19,13 +23,49 @@ public class Arc_ENTRANT extends Arc {
 
     public void enleverJetons() {
         // On retire le nombre de jetons du poids de l'arc
-        this.place.enleverJetons(this.poids);
+        this.place.enlever_jeton(this.poids);
+    }
+
+    public boolean verifier_tirable() {
+        if (this.place.get_nombre_jetons() >= this.poids) {
+            return true;
+        }
+        return false;
     }
 
+
     @Override
     public void valider() {
         // On retire le nombre de jetons du poids de l'arc
-        this.place.enleverJetons(this.poids);
+        // prendre en cond la place choisie
+        this.place.enlever_jeton(this.poids);
+    }
+
+
+
+    @Override
+    public int getPoids() {
+        return 0;
+    }
+
+    @Override
+    public void setPoid(int poids) {
+
+    }
+
+    @Override
+    public Place getPlace() {
+        return null;
+    }
+
+    @Override
+    public void setPlace(Place place) {
+
+    }
+
+    @Override
+    public Transition getTransition() {
+        return null;
     }
 
 }
\ No newline at end of file
diff --git a/src/main/java/org/petriNet/Arc_SORTANT.java b/src/main/java/org/petriNet/Arc_SORTANT.java
index 4ce91136c885b83d4c11c9a14b45ee46380bc73b..f3bc1a75abca7fa6b5a2d2262f70c6edf58f0e92 100644
--- a/src/main/java/org/petriNet/Arc_SORTANT.java
+++ b/src/main/java/org/petriNet/Arc_SORTANT.java
@@ -1,8 +1,14 @@
 package org.petriNet;
 
 public abstract class Arc_SORTANT extends Arc {
-    public Arc_SORTANT(Place place, Transition transition, int poids) {
-        super(place, transition, poids);
+
+    private Place place;
+    private Transition transition;
+    private int poids;
+    private int id;
+
+    public Arc_SORTANT(Place place, Transition transition, int poids, int id) {
+        super(place, transition, poids, id);
     }
 
     @Override
@@ -10,10 +16,12 @@ public abstract class Arc_SORTANT extends Arc {
         this.poids = poids;
     }
 
+
+
     @Override
     public void valider() {
         // On ajoute le nombre de jetons du poids de l'arc
-        this.place.ajouterJetons(this.poids);
+        this.place.ajouter_jeton(this.poids);
     }
 
     /**
@@ -25,7 +33,7 @@ public abstract class Arc_SORTANT extends Arc {
 
     public void ajouterJetons() {
         // On ajoute le nombre de jetons du poids de l'arc
-        this.place.ajouterJetons(this.poids);
+        this.place.ajouter_jeton(this.poids);
     }
 
 
diff --git a/src/main/java/org/petriNet/Arc_sortant_simple.java b/src/main/java/org/petriNet/Arc_sortant_simple.java
new file mode 100644
index 0000000000000000000000000000000000000000..8b3d25bd1fe8f44e7ce8aee868b3c6e279982c90
--- /dev/null
+++ b/src/main/java/org/petriNet/Arc_sortant_simple.java
@@ -0,0 +1,4 @@
+package org.petriNet;
+
+public class Arc_sortant_simple {
+}
diff --git a/src/main/java/org/petriNet/Arc_videur.java b/src/main/java/org/petriNet/Arc_videur.java
new file mode 100644
index 0000000000000000000000000000000000000000..6d07e27bddc3b6d4bd9b040e7157bdfa801f04e0
--- /dev/null
+++ b/src/main/java/org/petriNet/Arc_videur.java
@@ -0,0 +1,6 @@
+package org.petriNet;
+
+public class Arc_videur {
+
+
+}
diff --git a/src/main/java/org/petriNet/Arc_zero.java b/src/main/java/org/petriNet/Arc_zero.java
new file mode 100644
index 0000000000000000000000000000000000000000..1f4d875de828944af0acbd3d58d68afb50e6f931
--- /dev/null
+++ b/src/main/java/org/petriNet/Arc_zero.java
@@ -0,0 +1,4 @@
+package org.petriNet;
+
+public class Arc_zero {
+}
diff --git a/src/main/java/org/petriNet/PetriNetService.java b/src/main/java/org/petriNet/PetriNetService.java
index 223e5363e01b3fb01166f5d3d50105d1e1cfd896..95d8001148a085e9fb490f83c910247b4a991801 100644
--- a/src/main/java/org/petriNet/PetriNetService.java
+++ b/src/main/java/org/petriNet/PetriNetService.java
@@ -8,8 +8,6 @@ public interface PetriNetService {
 	
 	public void ajouterArc(Arc arc);
 	
-	public void tirerTransition(Transition transition);
-	
 	public void afficherEtat();
 
 	/**
@@ -19,4 +17,5 @@ public interface PetriNetService {
 	 */
 	public void afficherReseau();
 
+	public void tirer_transition(String id);
 }
diff --git a/src/main/java/org/petriNet/Place.java b/src/main/java/org/petriNet/Place.java
index 91b0559a0e3a35e67d13221a08ceb5ed95771fe8..0dd674b0021bbe992c0036f09216654b0d8e0376 100644
--- a/src/main/java/org/petriNet/Place.java
+++ b/src/main/java/org/petriNet/Place.java
@@ -9,13 +9,13 @@ public class Place {
         this.nombre_jeton = nombre_jeton;
     }
 
-    public void ajouter_jeton() {
-        this.nombre_jeton++;
+    public void ajouter_jeton(int jetons) {
+        this.nombre_jeton += jetons;
     }
 
-    public void enlever_jeton() {
+    public void enlever_jeton(int jetons) {
         if (this.nombre_jeton > 0) {
-            this.nombre_jeton--;
+            this.nombre_jeton -= jetons;
         } else {
             System.out.println("No more tokens to remove.");
         }
diff --git a/src/main/java/org/petriNet/ReseauPerti.java b/src/main/java/org/petriNet/ReseauPerti.java
index a68d7c988e12ea431a2819586b78e3532245295c..6fc48a8cce998b7d03f9f04a822bf491f6a3c7d1 100644
--- a/src/main/java/org/petriNet/ReseauPerti.java
+++ b/src/main/java/org/petriNet/ReseauPerti.java
@@ -1,5 +1,9 @@
 package org.petriNet;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Scanner;
+
 public class ReseauPerti implements PetriNetService {
 
 	// Creat attributes as Lists of Places, Transitions and Arcs
@@ -7,15 +11,40 @@ public class ReseauPerti implements PetriNetService {
 	private List<Place> places;
 	private List<Transition> transitions;
 	private List<Arc> arcs;
+	private String etat_reseau = "Pas de transition tirée";
 
 	// Create a constructor
 	public ReseauPerti() {
 		// initialiser les listes vide
-		this.places = new ArrayList<Place>();
-		this.transitions = new ArrayList<Transition>();
-		this.arcs = new ArrayList<Arc>();
+		this.places = new ArrayList<>();
+		this.transitions = new ArrayList<>();
+		this.arcs = new ArrayList<>();
+	}
+
+	// Create getters and setters
+	public List<Place> getPlaces() {
+		return places;
 	}
 
+	public void setPlaces(List<Place> places) {
+		this.places = places;
+	}
+
+	public List<Transition> getTransitions() {
+		return transitions;
+	}
+
+	public void setTransitions(List<Transition> transitions) {
+		this.transitions = transitions;
+	}
+
+	public  List<Arc> getArcs() {
+		return this.arcs;
+	}
+
+	public void setArcs(List<Arc> arcs) {
+		this.arcs = arcs;
+	}
 
 
 	@Override
@@ -37,28 +66,71 @@ public class ReseauPerti implements PetriNetService {
 	}
 
 	@Override
-	public void tirerTransition(Transition transition) {
-		// TODO Auto-generated method stub
-		// si la transition est tirable
-		if (transition.est_tirable()) {
-			// tirer la transition
-			transition.tirer();
+	public void tirer_transition(String id) {
+
+		// set the state of the network to "Transition en cours de verification"
+		this.etat_reseau = "Transition en cours de validation";
+
+		// Find the transition with the id
+		Transition transition_choisie = null;
+		for (Transition transition : this.transitions) {
+			if (transition.getId() == Integer.parseInt(id)) {
+				transition_choisie = transition;
+			}
+		}
+
+
+		// Check if the transition id is valid
+		if (transition_choisie == null) {
+			System.out.println("L'id de la transition n'est pas valide");
+			return;
+		} else {
+			// Check if the transition is tirable
+			transition_choisie.est_tirable();
+		}
+
+		// Ask if the user wants to validate the firing of the transition
+		Scanner scanner = new Scanner(System.in);
+		System.out.println("Voulez-vous valider le tirage de la transition? (O/N)");
+		String reponse = scanner.nextLine();
+		if (reponse.equals("O")) {
+			transition_choisie.tirer();
 		}
+
+		// set the state of the network to "Pas de transition tirée"
+		this.etat_reseau = "Pas de transition tirée";
+
 	}
 
 	@Override
 	public void afficherEtat() {
 		// TODO Auto-generated method stub
-		// afficher le nombre de jetons dans chaque place
-		for (Place place : places) {
-			System.out.println("Place " + place.getId() + " : " + place.getNbrJetons());
+		if (this.etat_reseau.equals("Pas de transition tirée")) {
+			System.out.println("Pas de transition tirée");
+			// Ask the user if they want to fire a transition
+			Scanner scanner = new Scanner(System.in);
+			System.out.println("Voulez-vous tirer une transition? (O/N)");
+			String reponse = scanner.nextLine();
+			if (reponse.equals("O")) {
+				// Show the Petri Net
+				afficherReseau();
+				// Ask the user for the id of the transition to fire
+				System.out.println("Saisir l'id de la transition à tirer: ");
+				String id = scanner.nextLine();
+				tirer_transition(id);
+			}
+		} else {
+			System.out.println("Transition en cours de validation");
 		}
 	}
 
+
 	@Override
-	public void afficherReseauPetri() {
+	public void afficherReseau() {
 		// TODO Auto-generated method stub
 
+		System.out.println(this.etat_reseau);
+
 		/**
 		 * afficher les places, les transitions et les arcs
 		 * comme un dessin du réseau de petri
@@ -78,5 +150,6 @@ public class ReseauPerti implements PetriNetService {
 		}
 
 
+	}
 
 }
diff --git a/src/main/java/org/petriNet/Transition.java b/src/main/java/org/petriNet/Transition.java
index 0782b7b636650ed2b8c1ad18fde5c5d5e77db1c7..618e0dce2642aef44d8815be7edef317896cba68 100644
--- a/src/main/java/org/petriNet/Transition.java
+++ b/src/main/java/org/petriNet/Transition.java
@@ -1,9 +1,14 @@
 package org.petriNet;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Scanner;
+
 public class Transition {
     private int id;
     private List<Arc_SORTANT> arcs_SORTANTS;
     private List<Arc_ENTRANT> arcs_ENTRANTS;
+    private List<Arc_ENTRANT> arcs_ENTRANTS_TIRABLE = new ArrayList<Arc_ENTRANT>();
 
     public Transition(int id, List<Arc_SORTANT> arcs_SORTANTS, List<Arc_ENTRANT> arcs_ENTRANTS) {
         this.id = id;
@@ -17,6 +22,22 @@ public class Transition {
      * c'est une différence par rapport au diagramme de classe soumis
      */
 
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public List<Arc_SORTANT> getArcs_SORTANTS() {
+        return arcs_SORTANTS;
+    }
+
+    public void setArcs_SORTANTS(List<Arc_SORTANT> arcs_SORTANTS) {
+        this.arcs_SORTANTS = arcs_SORTANTS;
+    }
+
     public void ajouterArc_SORTANT(Arc_SORTANT arc_SORTANT) {
         this.arcs_SORTANTS.add(arc_SORTANT);
     }
@@ -25,41 +46,52 @@ public class Transition {
         this.arcs_ENTRANTS.add(arc_ENTRANT);
     }
 
-    public boolean est_tirable() {
-        // verifier si la transition est tirable à travers l'ARC_SORTANT
-        int n_jetons_necessaires;
-        int n_jetons_existant;
 
-        // pour chaque arc sortant de la transition
-        // n_jetons_necessaires += arc_SORTANT.getPoids();
-        for (Arc_SORTANT arc_SORTANT : arcs_SORTANTS) {
-            n_jetons_necessaires += arc_SORTANT.getPoids();
-        }
+    public void est_tirable() {
+
+        // creer liste vide d'arcs
+        this.arcs_ENTRANTS_TIRABLE = new ArrayList<Arc_ENTRANT>();
 
-        // pour chaque arc entrant de la transition
-        // n_jetons_existant += arc_ENTRANT.getPoids();
         for (Arc_ENTRANT arc_ENTRANT : arcs_ENTRANTS) {
-            n_jetons_existant += arc_ENTRANT.getPoids();
+            if (arc_ENTRANT.verifier_tirable()) {
+                arcs_ENTRANTS_TIRABLE.add(arc_ENTRANT);
+            }
         }
 
-        // si n_jetons_necessaires <= n_jetons_existant
-        // return true;
-
-        if (n_jetons_necessaires <= n_jetons_existant) {
-            return true;
+        if(arcs_ENTRANTS_TIRABLE.isEmpty()){
+            System.out.println("La transition n'est pas tirable");
+        }
+        else {
+            System.out.println("La transition est tirable");
         }
-
     }
+
     public void tirer(){
-        // fait appel à valider() dans les classes Arc_SORTANT et
-        // Arc_ENTRANT pour modifier les jetons
 
-        for (Arc_ENTRANT arc_ENTRANT : arcs_ENTRANTS) {
-            arc_ENTRANT.valider();
+        est_tirable();
+
+        // print the list of arcs entrants tirables
+        System.out.println("Arcs entrants tirable: " + this.arcs_ENTRANTS_TIRABLE
+                    + "Saisir l'arc entrant à tirer: ");
+
+        // copilot get input from user of the id of the arc entrant to tirer (java.util.Scanner)
+        Scanner scanner = new Scanner(System.in);
+        int id = scanner.nextInt();
+
+        // find the Arc_ENTRANT by id
+        Arc_ENTRANT arc_ENTRANT_toTirer = null;
+        for (Arc_ENTRANT arc_ENTRANT : this.arcs_ENTRANTS_TIRABLE) {
+            if (arc_ENTRANT.getId() == id) {
+                arc_ENTRANT_toTirer = arc_ENTRANT;
+            }
         }
 
+        // valider l'arc entrant
+        arc_ENTRANT_toTirer.valider();
+
         for (Arc_SORTANT arc_SORTANT : arcs_SORTANTS) {
             arc_SORTANT.valider();
         }
+
     }
 }