package sudoku;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.junit.jupiter.api.Test;

public class TestMultidoku {

    @Test
    public void testMultidoku() {
        Multidoku multidoku = new Multidoku();
        Sudoku s1 = new Sudoku(9);
        Sudoku s2 = new Sudoku(9);

        // Placer sudoku1 en haut à gauche (offset (0,0))
        multidoku.ajouterSudoku(s1, 0, 0);
        // Placer sudoku2 de façon à ce que sa case (0,0) se retrouve en (8,8) de la
        // grille globale
        multidoku.ajouterSudoku(s2, 8, 8);

        // Créer un lien entre la case (8,8) de s1 et (0,0) de s2
        List<Case> casesPartagees = Arrays.asList(
                s1.getGrille().getCase(8, 8),
                s2.getGrille().getCase(0, 0));
        multidoku.ajouterCasesPartagees(casesPartagees);

        ArrayList<Symbole> symboles = new ArrayList<>();
        for (int i = 1; i <= 9; i++) {
            symboles.add(Symbole.of(i));
        }

        s1.getGrille().setSymbolesPossibles(symboles);
        List<Sudoku> sudokus = Arrays.asList(s1, s2);
        for (Sudoku sudoku : sudokus) {
            sudoku.getGrille().setSymbolesPossibles(symboles);
            sudoku.ajouterContrainte(new ContrainteLigne());
            sudoku.ajouterContrainte(new ContrainteColonne());
            sudoku.ajouterContrainte(new ContrainteBloc());
            sudoku.getGrille().creerBlocCarre();
        }

        System.out.println("Sudoku 1 :");
        System.out.println(s1.getGrille().toString());

        System.out.println("Sudoku 2 :");
        System.out.println(s2.getGrille().toString());

        System.out.println("\nAffichage Multidoku combiné :");
        // TODO: Afficher le Multidoku combiné
        System.out.println(multidoku.toStringCombined());
    }
}
