package org.Controllers;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import org.Models.Direction;
import org.Models.Jeu;
import org.Models.Orientation;

/**
 * Gère les entrées clavier pour contrôler le jeu.
 */

public class IO implements KeyListener {

    private Jeu jeu;

    /**
     * Crée un gestionnaire d'entrées clavier pour le jeu donné.
     *
     * @param jeu le jeu à contrôler
     */
    public IO(Jeu jeu) {
        this.jeu = jeu;
    }

    /**
     * Gère les actions à effectuer lors de l'appui sur une touche.
     *
     * @param e l'événement de touche pressée
     */
    @Override
    public void keyPressed(KeyEvent e) {
        if (jeu.getGrille().estEnPause()) {
            
            return;
        }
        switch (e.getKeyCode()) {
            case KeyEvent.VK_DOWN:
                jeu.getGrille().deplacerPiece(Direction.BAS);
                break;

            case KeyEvent.VK_LEFT:
                jeu.getGrille().deplacerPiece(Direction.GAUCHE);
                break;

            case KeyEvent.VK_RIGHT:
                jeu.getGrille().deplacerPiece(Direction.DROITE);
                break;

            case KeyEvent.VK_SPACE:
                jeu.getGrille().deplacerPiece(Direction.TOUTENBAS);
                break;

            case KeyEvent.VK_R:
                jeu.getGrille().tournerPiece(Orientation.SENSHORAIRE);
                break;

            case KeyEvent.VK_E:
                jeu.getGrille().tournerPiece(Orientation.SENSANTIHORAIRE);
                break;

            default:
                break;
        }
    }

    /**
     * Méthode appelée lors de la saisie d'un caractère (non utilisée).
     *
     * @param e l'événement de touche tapée
     */
    @Override
    public void keyTyped(KeyEvent e) {
    }

    /**
     * Méthode appelée lors du relâchement d'une touche (non utilisée).
     *
     * @param e l'événement de touche relâchée
     */
    @Override
    public void keyReleased(KeyEvent e) {
    }
}
