package eg.ufe.codecorrecteur;

import java.util.Arrays;

public class TestBlocAvecRapportErreurs {
  public static void main(String[] args) {
    // Les données à transmettre
    byte[] valeurs = {1, 2, 3, 4, 5, 6};
    
    System.out.println("Valeurs à transmettre :");
    System.out.println(Arrays.toString(valeurs));
    
    BlocAvecRapportErreurs[] blocsTransmis = BlocAvecRapportErreurs.coder(valeurs);
    System.out.println("Blocs avant la transmission :");
    for (BlocAvecRapportErreurs bloc : blocsTransmis) {
      System.out.println(bloc);
    }
      
    // Simule des erreurs de transmission
    // Erreur sur 2ème octet
    blocsTransmis[1].simulationErreurTransmission(0, (byte)25);
    // Erreurs sur 4ème octet
    blocsTransmis[3].simulationErreurTransmission(0, (byte)44);
    blocsTransmis[3].simulationErreurTransmission(1, (byte)55);
    blocsTransmis[3].simulationErreurTransmission(2, (byte)66);
    // Erreurs sur 5ème octet
    blocsTransmis[4].simulationErreurTransmission(1, (byte)45);
    blocsTransmis[4].simulationErreurTransmission(2, (byte)45);
    // Erreurs sur 6ème octet
    blocsTransmis[5].simulationErreurTransmission(0, (byte)58);
    blocsTransmis[5].simulationErreurTransmission(1, (byte)58);
    blocsTransmis[5].simulationErreurTransmission(2, (byte)58);
    
    System.out.println("Blocs après la transmission :");
    for (BlocAvecRapportErreurs bloc : blocsTransmis) {
      System.out.println(bloc);
    }
    
    // Décodage des données reçues avec enregistrement des problèmes
    // de décodage (en cas d'erreur de transmission).
    byte[] valeursTransmises = BlocAvecRapportErreurs.decoder(blocsTransmis);
    // Affichage des données reçues, après le décodage
    System.out.println("Valeurs décodées");
    System.out.println(Arrays.toString(valeursTransmises));
    
    // Affichage du rapport des erreurs
    for (int i = 0; i < blocsTransmis.length; i++) {
      System.out.println("Bloc " + i + " : " + blocsTransmis[i].getTypeErreur());
    }
  }
}