//Scrivere un programma che realizzi un codice di sostituzione in cui si possa sostituire ogni lettera con quella che la segue di n posizioni (1<=n<=26) dove n è
//la chiave di cifratura
// specifiche del problema
// dato un testo (lettere minuscole) in chiaro e una chiave, cifrare il testo con il codice di sostituzione
// dato un testo cifrato (lettere minuscole) ottenere il testo in chiaro a patto di fornire la chiave corretta
// preservare l'inviolabilità del codice: il testo originale può essere ottenuto solamente conoscendo la chiave
//sottoproblemi
//menu a due scelte: codifica e decodifica
//acquisizione di testo e chiave
//costruire il testo (cifrato o in chiaro)mediante la sostituzione di un carattere alla volta
import prog.io.*;
import java.lang.*;
import prog.utili.*;
class keydicifratura {
	
	public static void main(String[] args) {
		ConsoleOutputManager out = new ConsoleOutputManager();
		ConsoleInputManager in = new ConsoleInputManager();
		
		String alfabeto = "abcdefghijklmnopqrstuvwxyz";
                                     String testo;
                                     int chiave;
                                     char caratterevuoto= " ";
                                      //realizzo il menu a doppia scelta
                                      out.println("MENU");
                                      out.println("1)Codifica");
                                      out.println("2)Decodifica");
                                      
                                      do
                                      {
                                      int scelta=in.readInt("\n Inserisci il numero associato all'operazione che desidera eseguire: ");
                                     
                                      switch(scelta)
                                      {
                                        case 1:
                                                     testo=in.readLine("Inserisci il testo che desideri codificare: ");
                                                     chiave=in.readInt("Inserisci la chiave di codifica: ");
                                                     String testoCodificato="";
                                                     testo=testo.toLowerCase().trim();        //testo in minuscolo ed elimino gli spazi
                                                     for(int i=0; i<testo.length();i++)
                                                        {
                                                           char carattere;
                                                           if((carattere=testo.charAt(i)) != caratterevuoto )           //se il carattere prelevato da testo con indice i e messo in carattere è diverso da 0
                                                           {
                                                              testoCodificato+=alfabeto.charAt((alfabeto.indexOf  (carattere)+chiave) %26);   //????????
                                                            }
                                                           else     testoCodificato+='   ';
                                                        }
                                                     testoCodificato=testoCodificato.toUpperCase();
                                                     out.println("Testo cifrato: "+testoCodificato);
                                                      break;
                                        case 2:  testo=in.readLine("Inserisci il codice da decodificare: ");
                                                      chiave=in.readInt("Inserisci la chiave di lettura del codice: ");
                                                      String testoDecodificato="";
                                                      testo=testo.toLowerCase().trim();   //elimino gli spazi oltre a rendere tutto minuscolo
                                                      for(int i=0; i<testo.length(); i++)
                                                      {          
                                                        char carattere;
                                                        if((carattere=testo.charAt(i)) !=  caratterevuoto')
                                                               
testoDecodificato+=alfabeto.charAt((alfabeto.index  Of(carattere)+26-chiave)%26);  //giusto,però non capisco il %26 
                                                        else   testoDecodificato+= '   ';
                                                      }
                                                      testoDecodificato=testoDecodificato.toUpperCase();
                                                      out.println("Testo codificato: "+testoDecodificato);
                                                      break;
                 
                                                   
                                        case default: out.println("Hai inserito il numero sbagliato");
                                      }}
                                      while(scelta!=1 && scelta !=2  && scelta !=0);
}}