// In questo file NON ci deve essere nessuna dichiarazione "package"
// come per esempio
//
//	    package progetto;

// Potete aggiungere qui altri "import" per usare le librerie
// standard di Java, se vi servono.

import helper2025.Helper;
import helper2025.TestCase;

//NON modificate in nessun modo la linea seguente.
public class Progetto {

	// Una costante per indicare il punteggio di un percorso fallimentare.
	static final int FALLIMENTO = -1000000;

	// Qui potete liberamente aggiungere funzioni / procedure.
	
	// Se volete, potete anche inserire variabili globali.
	// Se decidete di inserirle, dovete fare in modo che la funzione
	//     percorriLabirinto
	// inizializzi tali variabili **ogni volta** che viene chiamata. 
	// Inizializzarle una volta sola nel main NON basta, visto che la
	// funzione verra` chiamate piu` volte.
	
	// NON modificate in nessun modo la linea seguente.
	public static int percorriLabirinto(char[][] mappa, String percorso) {
        // Qui potete inserire il vostro codice.
	    	       
		return FALLIMENTO; 
	}
    
	// Potete modificare il main liberamente. Potete per esempio eseguire
	// qualche test sulla funzione sopra, come quelli suggeriti sotto.
	// Ricordatevi che chi corregge il progetto NON eseguira` il vostro
	// main, ma i propri test.
	// 
	public static void main(String[] args) {
		long seed = 123456;
		
		int numeroTest = 100;
		long t0 = System.currentTimeMillis();
		Helper helper = new Helper();
		int superati = 0;

		for (int i = 0; i < numeroTest; i++) {
			// Genera una mappa e un percorso casuale.
			helper.setSeed(seed + i);
			TestCase t = helper.generaTest();
			char[][] mappa = t.getMappa();
			String percorso = t.getMosse();
			
			try {
				// Calcola il punteggio.
				int punti = percorriLabirinto(mappa, percorso);
		
				// Controlla che il punteggio sia quello atteso.
				if (helper.testSoluzione(punti, t)) {
					superati++;
				} else {
					System.out.println("Fallito test " + i + " seed " + seed);
					// Stampa la mappa in formato ASCII, utile per il deubug.
					helper.stampaLabirinto(t.getMappa());

					// Il codice sotto genera l'immagine PNG del labirinto, utile
					//  per visualizzare la mappa a colori.
					// Se volete usarlo, dovete prima installare le immagini "tiles"
					// nella cartella seguente:
					//   ..../workspace/cognome_matricola/png/tiles/
					// Dovreste quindi ottenere:
					//   ..../workspace/cognome_matricola/src/Progetto.java
					//   ..../workspace/cognome_matricola/png/tiles/bomba.png
					//   ..../workspace/cognome_matricola/png/tiles/ingresso.png
					// eccetera.
					// Dopo, impostate il booleano sotto a true.
					
					boolean generaImmagini = false;
					if (generaImmagini) {
						new java.io.File("png").mkdirs();
						helper.inizializzaTiles("png/tiles", 32); // tile 32x32 pixel
						helper.generaImmagineLabirinto(t.getMappa(), "png/labirinto_testcase_" + i + "_" + ".png");
					}
				}
			} catch(Exception e) {
				System.out.println("Crash durante il test " + i + " seed " + seed);
				throw e; // Termina il programma con l'errore.
			}
		}

		long t1 = System.currentTimeMillis();
		if (superati == numeroTest) {
			System.out.println("Tutti i test sono stati superati.");
		} else {
			System.out.println("Alcuni test NON sono stati superati!!!");
			System.out.println("Superati " + superati + " test su " + numeroTest);
		}
		System.out.println("Tempo impiegato: " + (t1-t0)/1000.0 + " secondi.");
	}
}
