package linea;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.util.ArrayList;
import javax.swing.JPanel;

public class ZoneDessin extends JPanel { // hérite d'une classe du frameWork standard 

	private static final long serialVersionUID = 1L;
	
	//-------------------------------------------------------------------------
	// PROPRIETES
	//-------------------------------------------------------------------------
	public boolean partiePerdue = false;
	// un booleen qui permet d'arreter l'animation (suspendre)
	protected boolean estArrete = false;
	
	// Une liste d'objets graphique
	// Pour permettre à traiterBoucleAnimation() de parcourir les objets sans distinction pour les animer
	protected  ArrayList<ObjetGraphique> listeObjets = new ArrayList<>();
	
	//-------------------------------------------------------------------------
	// METHODES
	//-------------------------------------------------------------------------
	
	//-------------------------------------------------------------------------
	// Constructeur de la classe
	//-------------------------------------------------------------------------	
	public ZoneDessin(){
		// on prépare la zone d'affichage
		setLayout(new BorderLayout());
		setPreferredSize(new Dimension(800, 600));
		setBackground(new Color(220,170,0));		
	}

	
	//-------------------------------------------------------------------------
	// Ajout d'un objet graphique à la zonde de dessin
	//-------------------------------------------------------------------------	
	public void ajouterObjet(ObjetGraphique unObjet) {
		this.listeObjets.add(unObjet);
	}
	
	
	//-------------------------------------------------------------------------
	// Mettre en pause et redémarrer
	//-------------------------------------------------------------------------	
	public void arreter(){
		estArrete = true;
	}
	
	public void demarrer(){
		estArrete = false;
	}
	

	//-------------------------------------------------------------------------
	// Boucle d'animation : 
	// 	- appelée par exemple 25 fois par seconde
	//	- à chaque appel :
	//		- on anime (déplace) chaque objet
	//		- on redessine tout : appel à paintComponent, déclenché par repaint
	//-------------------------------------------------------------------------	
	public void traiterBoucleAnimation(){
		if (estArrete==true) {
			return;
		}
		
		// 1. on déplace chaque objet graphique
		// A FAIRE : décommenter lorsque cela devienda exécutable, et compléter
		
		for (ObjetGraphique obj : listeObjets){
			// A FAIRE : demander à obj de s'animer
			obj.Animer();
		}
		
		
		
		// 2. on demande à redessiner, ce qui déclenchera automatiquement 
		//  l'appel à la méthode paintComponent, qui est ci-dessous
		repaint();		
	}
	
	
	//-------------------------------------------------------------------------
	// Dessin, déclenché par le repaint() de la méthode ci-dessus 
	//-------------------------------------------------------------------------
	public void paintComponent(Graphics g) {
		// On demande à la super-classe (JPanel) de se redessiner
		super.paintComponent(g);		

		// Puis on ajoute ce qui est spécifique à la classe
		
		// on indique qu'il faut de l'antialiasing 
		Graphics2D g2D = (Graphics2D) g;
		g2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
		
		// à compléter
		for(ObjetGraphique obj: listeObjets){
			obj.Afficher(g); //Chaque objet se dessine lui-même
		}
		if (this.partiePerdue) {
			g.setColor(Color.RED);
			g.setFont(new java.awt.Font("Arial", java.awt.Font.BOLD, 50));
			g.drawString("GAME OVER", 250, 300);
    	}
	}
	
}
	
	
