import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.util.ArrayList;

import javax.swing.JPanel;

//cette classe gere l'affichage de l'inventaire


public class FenetreInventaire extends JPanel implements ActionListener   {

	private final int LARGEUR_FENETRE ;
	private final int HAUTEUR_FENETRE ;
	private BufferedImage monBuf;
	javax.swing.Timer timer;
	boolean show = false ; 
	Jeu jeu ;
	private BufferedImage fond;
	int xCurseur =  100 ;
	int yCurseur = 300 ;
	int compteurCurseurBefor = 0 ;
	int compteurCurseur = 0 ; 
	int compteurCurseurX = 0;
	int compteurCurseurY = 0;
	static Clavier clavier ;

	//création d'ArrayList d'image de ressources à partir des ressources du joueur
	ArrayList<ImageInventaire> liste_ressources = new ArrayList<ImageInventaire>() ;
	ArrayList<ImageObjet> liste_armes = new ArrayList<ImageObjet>() ;
	ArrayList<ImageObjet> liste_equipements = new ArrayList<ImageObjet>() ;
	ArrayList<ImageNourriture> liste_nourriture = new ArrayList<ImageNourriture>() ;
	ArrayList<ImageObjet> liste_objets = new ArrayList<ImageObjet>() ;
	
	//boolean pour savoir quel panneau doit etre afficher
	static boolean afficher_liste_nourriture = true;
	static boolean afficher_liste_ressources = false;
	static boolean afficher_liste_armes = false;
	static boolean afficher_liste_equipements = false;
	static boolean afficher_liste_objets = false;
	
	//boolean pour savoir si un objet est deja equipe par catégorie
	boolean arme_equipe,armure_equipe,casque_equipe,bouclier_equipe ;
		 
	public FenetreInventaire(int LARGEUR_FENETRE, int HAUTEUR_FENETRE,Clavier clavier, Jeu jeu){
		
		this.jeu=jeu;
		this.clavier=clavier;
		setSize(LARGEUR_FENETRE,HAUTEUR_FENETRE);
		this.HAUTEUR_FENETRE = HAUTEUR_FENETRE;
		this.LARGEUR_FENETRE = LARGEUR_FENETRE;
		this.monBuf = new BufferedImage(LARGEUR_FENETRE,HAUTEUR_FENETRE,BufferedImage.TYPE_INT_RGB);
		
		
		
		//Initialisation des listes
		for(int i=0;i<jeu.fenetre_JEU.j1.nourriture_joueur.length;i++){
			liste_nourriture.add(new ImageNourriture(1,jeu.fenetre_JEU.j1.nourriture_joueur[i],false,this));
		}
		for(int i=0;i<jeu.fenetre_JEU.j1.ressources_joueur.length;i++){
			liste_ressources.add(new ImageInventaire(2,jeu.fenetre_JEU.j1.ressources_joueur[i],false,this));
		}
		for(int i=0;i<jeu.fenetre_JEU.j1.armes_joueur.length;i++){
			liste_armes.add(new ImageObjet(3,jeu.fenetre_JEU.j1.armes_joueur[i],false,this));
		}
		for(int i=0;i<jeu.fenetre_JEU.j1.equipements_joueur.length;i++){
			liste_equipements.add(new ImageObjet(4,jeu.fenetre_JEU.j1.equipements_joueur[i],false,this));
		}
		for(int i=0;i<jeu.fenetre_JEU.j1.objets_joueur.length;i++){
			liste_objets.add(new ImageObjet(5,jeu.fenetre_JEU.j1.objets_joueur[i],false,this));
		}
		
		//Chargement de l'image de fond qui est un screen de la fenetre de jeu pour donner l'illusion que l'inventaire s'affiche par dessus le jeu
		fond = jeu.fenetre_JEU.screen ;
		
		timer = new javax.swing.Timer((int)(1.0/60.0)*1000,this);
		timer.start();	
				
	}
	
	public void paint(Graphics g){
		
		Graphics buffer = monBuf.getGraphics();
		
		//afficher le screen en fond
		buffer.drawImage(fond,0,0,this);
		
		//barre grise en haut
		buffer.setColor(new Color(150,150,150,200));
		buffer.fillRect(0,0,LARGEUR_FENETRE,HAUTEUR_FENETRE);
		
		Font police = new Font("Tahoma", Font.BOLD, 20);
		buffer.setFont(police);
		
		//affichage du "defileur"
		if(!afficher_liste_nourriture){
			buffer.setColor(new Color(80,80,80,127));
		}
		if(afficher_liste_nourriture){
			buffer.setColor(new Color(30,30,30,127));
			buffer.drawString("Nourriture",100,265);
		}
		buffer.drawLine(100,280,200,280);
		buffer.drawLine(100,279,200,279);
		buffer.drawLine(100,278,200,278);
		buffer.drawLine(100,277,200,277);
		buffer.drawLine(100,276,200,276);
		
		
		if(!afficher_liste_ressources){
			buffer.setColor(new Color(80,80,80,127));
		}
		if(afficher_liste_ressources){
			buffer.setColor(new Color(30,30,30,127));
			buffer.drawString("Ressources",220,265);
		}
		buffer.drawLine(220,280,320,280);
		buffer.drawLine(220,279,320,279);
		buffer.drawLine(220,278,320,278);
		buffer.drawLine(220,277,320,277);
		buffer.drawLine(220,276,320,276);
		
		
		if(!afficher_liste_armes){
			buffer.setColor(new Color(80,80,80,127));
		}
		if(afficher_liste_armes){
			buffer.setColor(new Color(30,30,30,127));
			buffer.drawString("Armes",340,265);
		}
		buffer.drawLine(340,280,440,280);
		buffer.drawLine(340,279,440,279);
		buffer.drawLine(340,278,440,278);
		buffer.drawLine(340,277,440,277);
		buffer.drawLine(340,276,440,276);
		
		if(!afficher_liste_equipements){
			buffer.setColor(new Color(80,80,80,127));
		}
		if(afficher_liste_equipements){
			buffer.setColor(new Color(30,30,30,127));
			buffer.drawString("Equipements",460,265);
		}
		buffer.drawLine(460,280,560,280);
		buffer.drawLine(460,279,560,279);
		buffer.drawLine(460,278,560,278);
		buffer.drawLine(460,277,560,277);
		buffer.drawLine(460,276,560,276);
		
		if(!afficher_liste_objets){
			buffer.setColor(new Color(80,80,80,127));
		}
		if(afficher_liste_objets){
			buffer.setColor(new Color(30,30,30,127));
			buffer.drawString("Objets",580,265);
		}
		buffer.drawLine(580,280,680,280);
		buffer.drawLine(580,279,680,279);
		buffer.drawLine(580,278,680,278);
		buffer.drawLine(580,277,680,277);
		buffer.drawLine(580,276,680,276);
		
		police = new Font("Tahoma", Font.BOLD, 10);
		buffer.setFont(police);
	
		//affichage de la grille de fond et des ressources/objet
		for(int i=0 ; i<4 ; i++){
			for(int j=0 ; j<5 ; j++){
				buffer.setColor(new Color(100,100,100,100));
				buffer.fillRoundRect(100+120*j,300+120*i,100,100,10,10);
				
					if(5*i+j<liste_nourriture.size()){
						liste_nourriture.get(5*i+j).dessine(buffer,this,100+120*j,300+120*i);
					}
				
					if(5*i+j<liste_ressources.size()){
						liste_ressources.get(5*i+j).dessine(buffer,this,100+120*j,300+120*i);
					}
				
					if(5*i+j<liste_equipements.size()){
						liste_equipements.get(5*i+j).dessine(buffer,this,100+120*j,300+120*i);
					}
				
					if(5*i+j<liste_armes.size()){
						liste_armes.get(5*i+j).dessine(buffer,this,100+120*j,300+120*i);
					}
				
					if(5*i+j<liste_objets.size()){
						liste_objets.get(5*i+j).dessine(buffer,this,100+120*j,300+120*i);
					}
				
			}
		}
		
		//affichage du curseur
		int largeur = 100 ;
		int hauteur = 100 ;
		
		buffer.setColor(Color.white);
		buffer.drawRoundRect(xCurseur,yCurseur,largeur,hauteur,10,10);
		buffer.drawRoundRect(xCurseur+1,yCurseur+1,largeur-2,hauteur-2,10,10);
		buffer.drawRoundRect(xCurseur+2,yCurseur+2,largeur-4,hauteur-4,10,10);
		buffer.drawRoundRect(xCurseur+3,yCurseur+3,largeur-6,hauteur-6,10,10);
		
		int[] xPoints = {xCurseur,xCurseur+20,xCurseur};
		int[] yPoints = {yCurseur,yCurseur,yCurseur+20};
		buffer.fillPolygon(xPoints,yPoints,3);
		
		int[] xPoints2 = {xCurseur+largeur,xCurseur+largeur-20,xCurseur+largeur};
		int[] yPoints2 = {yCurseur,yCurseur,yCurseur+20};
		buffer.fillPolygon(xPoints2,yPoints2,3);
		
		int[] xPoints3 = {xCurseur,xCurseur+20,xCurseur};
		int[] yPoints3 = {yCurseur+hauteur,yCurseur+hauteur,yCurseur+hauteur-20};
		buffer.fillPolygon(xPoints3,yPoints3,3);
		
		int[] xPoints4 = {xCurseur+largeur,xCurseur+largeur-20,xCurseur+largeur};
		int[] yPoints4 = {yCurseur+hauteur,yCurseur+hauteur,yCurseur+hauteur-20};
		buffer.fillPolygon(xPoints4,yPoints4,3);
		
		buffer.setColor(new Color(100,100,100,200));
		buffer.fillRect(0,0,LARGEUR_FENETRE,HAUTEUR_FENETRE/5);
		buffer.fillRect(0,4*HAUTEUR_FENETRE/5,LARGEUR_FENETRE,HAUTEUR_FENETRE/5);
		
		//affichage du nom joueur
		police = new Font("Tahoma", Font.ITALIC, 50);
		buffer.setFont(police);
		buffer.setColor(new Color(200,200,200,240));
		buffer.drawString(jeu.fenetre_JEU.j1.nom,LARGEUR_FENETRE/2-100,150);
		
		//rectangle equipement
		Graphics2D g2d = (Graphics2D)buffer;         
		GradientPaint gp = new GradientPaint(0, 0,  new Color(100,100,100,127), 1000, 0,new Color(30,30,30,127), true);                
		g2d.setPaint(gp);
		g2d.fillRoundRect(1100,300,720,220,20,20);
		
		buffer.setColor( new Color(100,100,100,127));
		buffer.drawRoundRect(1105,305,710,210,20,20);
		buffer.drawRoundRect(1104,304,712,212,20,20);
		
		buffer.setFont(new Font("Tahoma", Font.ITALIC, 30));
		buffer.setColor(new Color(200,200,200,240));
		buffer.drawString("Equipement :",1130,340);
		
		for(int i=0;i<4;i++){
			buffer.setColor(new Color(200,200,200,100));
			buffer.drawRoundRect(1130+i*120,400,100,100,10,10);
			buffer.drawRoundRect(1131+i*120,401,98,98,10,10);
			buffer.drawRoundRect(1132+i*120,402,96,96,10,10);
		}
		
		//affichage du perso et rectangle d'info joueur
		buffer.drawImage(ImageLoader.ImgLoaderSpe("Player.gif",0,78,20,26),740,300,340,300,this);
		
		g2d.setPaint(gp);
		g2d.fillRoundRect(720,630,340,130,20,20);
		
		buffer.setFont(new Font("Tahoma", Font.ITALIC, 20));
		buffer.setColor(new Color(200,200,200,240));
		buffer.drawString("Degats : "+jeu.fenetre_JEU.j1.degat+"  mine : "+jeu.fenetre_JEU.j1.degat_mine,750,660);
		buffer.drawString("arbre : "+jeu.fenetre_JEU.j1.degat_arbre+"  Resistance : "+jeu.fenetre_JEU.j1.resistance,750,700);
		buffer.drawString("Faim : "+jeu.fenetre_JEU.j1.nourriture+"  Eau : "+jeu.fenetre_JEU.j1.eau,750,740);
		
		
		
		g.drawImage(monBuf,0,0,this);	
	}
	
	public void actionPerformed(ActionEvent e) {
		
		//cette condition permet de ne pas faire tourner l'inventaire s'il n'est pas afficher a l'ecran
		if(show){
			
			//ce qui suit est une suite de condition un peu lourde qui permet le changement de position du curseur et le passage de panneau en panneau
			
			
			if(afficher_liste_nourriture){
				
				compteurCurseurBefor=compteurCurseur;
				
				if(clavier.keyToutJusteAppuie(KeyEvent.VK_UP) && compteurCurseurY>0 && compteurCurseur>0 && compteurCurseur<liste_nourriture.size()) {
					yCurseur-=120;
					compteurCurseur-=5;
					compteurCurseurY-=1;
				}else if(clavier.keyToutJusteAppuie(KeyEvent.VK_DOWN) && compteurCurseurY<3 && compteurCurseur>=0 && compteurCurseur<liste_nourriture.size()-5) {
					yCurseur+=120;
					compteurCurseur+=5;
					compteurCurseurY+=1;
				}else if(clavier.keyToutJusteAppuie(KeyEvent.VK_LEFT) && compteurCurseurX>0 && compteurCurseur>0 && compteurCurseur<liste_nourriture.size()) {
					xCurseur-=120;
					compteurCurseur-=1;
					compteurCurseurX-=1;
				}else if(clavier.keyToutJusteAppuie(KeyEvent.VK_RIGHT) && compteurCurseurX<4 && compteurCurseur>=0 && compteurCurseur<liste_nourriture.size()-1) {
					xCurseur+=120;
					compteurCurseur+=1;
					compteurCurseurX+=1;
				}else if(clavier.keyToutJusteAppuie(KeyEvent.VK_LEFT)) {
					xCurseur =  100 ;
					yCurseur = 300 ;
					compteurCurseur = 0 ; 
					compteurCurseurX = 0;
					compteurCurseurY = 0;
					afficher_liste_nourriture = false;
					afficher_liste_ressources = false ;
					afficher_liste_armes = false ;
					afficher_liste_equipements = false ;
					afficher_liste_objets = true;
				}else if(clavier.keyToutJusteAppuie(KeyEvent.VK_RIGHT)) {
					xCurseur =  100 ;
					yCurseur = 300 ;
					compteurCurseur = 0 ; 
					compteurCurseurX = 0;
					compteurCurseurY = 0;
					afficher_liste_nourriture = false;
					afficher_liste_ressources = true ;
					afficher_liste_armes = false ;
					afficher_liste_equipements = false ;
					afficher_liste_objets = false;
					
				}
				
				liste_nourriture.get(compteurCurseur).active=true; 
				    
				if(compteurCurseur!=compteurCurseurBefor){
					liste_nourriture.get(compteurCurseurBefor).active=false; 
				}
			}
			
			else if(afficher_liste_equipements){
				
				compteurCurseurBefor=compteurCurseur;
				
				if(clavier.keyToutJusteAppuie(KeyEvent.VK_UP) && compteurCurseurY>0 && compteurCurseur>0 && compteurCurseur<liste_equipements.size()) {
					yCurseur-=120;
					compteurCurseur-=5;
					compteurCurseurY-=1;
				}else if(clavier.keyToutJusteAppuie(KeyEvent.VK_DOWN) && compteurCurseurY<3 && compteurCurseur>=0 && compteurCurseur<liste_equipements.size()-5) {
					yCurseur+=120;
					compteurCurseur+=5;
					compteurCurseurY+=1;
				}else if(clavier.keyToutJusteAppuie(KeyEvent.VK_LEFT) && compteurCurseurX>0 && compteurCurseur>0 && compteurCurseur<liste_equipements.size()) {
					xCurseur-=120;
					compteurCurseur-=1;
					compteurCurseurX-=1;
				}else if(clavier.keyToutJusteAppuie(KeyEvent.VK_RIGHT) && compteurCurseurX<4 && compteurCurseur>=0 && compteurCurseur<liste_equipements.size()-1) {
					xCurseur+=120;
					compteurCurseur+=1;
					compteurCurseurX+=1;
				}else if(clavier.keyToutJusteAppuie(KeyEvent.VK_LEFT)) {
					xCurseur =  100 ;
					yCurseur = 300 ;
					compteurCurseur = 0 ; 
					compteurCurseurX = 0;
					compteurCurseurY = 0;
					afficher_liste_ressources = false ;
					afficher_liste_armes = true ;
					afficher_liste_equipements = false ;
					afficher_liste_nourriture = false;
					afficher_liste_objets = false;
				}else if(clavier.keyToutJusteAppuie(KeyEvent.VK_RIGHT)) {
					xCurseur =  100 ;
					yCurseur = 300 ;
					compteurCurseur = 0 ; 
					compteurCurseurX = 0;
					compteurCurseurY = 0;
					afficher_liste_ressources = false ;
					afficher_liste_armes = false ;
					afficher_liste_equipements = false ;
					afficher_liste_nourriture = false;
					afficher_liste_objets = true;
					
				}
				
				liste_equipements.get(compteurCurseur).active=true; 
				    
				if(compteurCurseur!=compteurCurseurBefor){
					liste_equipements.get(compteurCurseurBefor).active=false; 
				}
			}
			
			else if(afficher_liste_armes){
				
				compteurCurseurBefor=compteurCurseur;
				
				if(clavier.keyToutJusteAppuie(KeyEvent.VK_UP) && compteurCurseurY>0 && compteurCurseur>0 && compteurCurseur<liste_armes.size()) {
					yCurseur-=120;
					compteurCurseur-=5;
					compteurCurseurY-=1;
				}else if(clavier.keyToutJusteAppuie(KeyEvent.VK_DOWN) && compteurCurseurY<3 && compteurCurseur>=0 && compteurCurseur<liste_armes.size()-5) {
					yCurseur+=120;
					compteurCurseur+=5;
					compteurCurseurY+=1;
				}else if(clavier.keyToutJusteAppuie(KeyEvent.VK_LEFT) && compteurCurseurX>0 && compteurCurseur>0 && compteurCurseur<liste_armes.size()) {
					xCurseur-=120;
					compteurCurseur-=1;
					compteurCurseurX-=1;
				}else if(clavier.keyToutJusteAppuie(KeyEvent.VK_RIGHT) && compteurCurseurX<4 && compteurCurseur>=0 && compteurCurseur<liste_armes.size()-1) {
					xCurseur+=120;
					compteurCurseur+=1;
					compteurCurseurX+=1;
				}else if(clavier.keyToutJusteAppuie(KeyEvent.VK_LEFT)) {
					xCurseur =  100 ;
					yCurseur = 300 ;
					compteurCurseur = 0 ; 
					compteurCurseurX = 0;
					compteurCurseurY = 0;
					afficher_liste_ressources = true ;
					afficher_liste_armes = false ;
					afficher_liste_equipements = false ;
					afficher_liste_nourriture = false;
					afficher_liste_objets = false;
				}else if(clavier.keyToutJusteAppuie(KeyEvent.VK_RIGHT)) {
					xCurseur =  100 ;
					yCurseur = 300 ;
					compteurCurseur = 0 ; 
					compteurCurseurX = 0;
					compteurCurseurY = 0;
					afficher_liste_ressources = false ;
					afficher_liste_armes = false ;
					afficher_liste_equipements = true ;
					afficher_liste_nourriture = false;
					afficher_liste_objets = false;
				}   
				
				liste_armes.get(compteurCurseur).active=true;
				
				if(compteurCurseur!=compteurCurseurBefor){
					liste_armes.get(compteurCurseurBefor).active=false;
				}
				
			}
			else if(afficher_liste_ressources){
				
				compteurCurseurBefor=compteurCurseur;
				
				if(clavier.keyToutJusteAppuie(KeyEvent.VK_UP) && compteurCurseurY>0 && compteurCurseur>0 && compteurCurseur<liste_ressources.size()) {
					yCurseur-=120;
					compteurCurseur-=5;
					compteurCurseurY-=1;
				}else if(clavier.keyToutJusteAppuie(KeyEvent.VK_DOWN) && compteurCurseurY<3 && compteurCurseur>=0 && compteurCurseur<liste_ressources.size()-5) {
					yCurseur+=120;
					compteurCurseur+=5;
					compteurCurseurY+=1;
				}else if(clavier.keyToutJusteAppuie(KeyEvent.VK_LEFT) && compteurCurseurX>0 && compteurCurseur>0 && compteurCurseur<liste_ressources.size()) {
					xCurseur-=120;
					compteurCurseur-=1;
					compteurCurseurX-=1;
				}else if(clavier.keyToutJusteAppuie(KeyEvent.VK_RIGHT) && compteurCurseurX<4 && compteurCurseur>=0 && compteurCurseur<liste_ressources.size()-1) {
					xCurseur+=120;
					compteurCurseur+=1;
					compteurCurseurX+=1;
				}else if(clavier.keyToutJusteAppuie(KeyEvent.VK_LEFT)) {
					xCurseur =  100 ;
					yCurseur = 300 ;
					compteurCurseur = 0 ; 
					compteurCurseurX = 0;
					compteurCurseurY = 0;
					afficher_liste_ressources = false ;
					afficher_liste_armes = false ;
					afficher_liste_equipements = false ;
					afficher_liste_nourriture = true;
					afficher_liste_objets = false;
				}else if(clavier.keyToutJusteAppuie(KeyEvent.VK_RIGHT)) {
					xCurseur =  100 ;
					yCurseur = 300 ;
					compteurCurseur = 0 ; 
					compteurCurseurX = 0;
					compteurCurseurY = 0;
					afficher_liste_ressources = false ;
					afficher_liste_armes = true ;
					afficher_liste_equipements = false ;
					afficher_liste_nourriture = false;
					afficher_liste_objets = false;
					
				}   
				
				liste_ressources.get(compteurCurseur).active=true;
				
				if(compteurCurseur!=compteurCurseurBefor){
					liste_ressources.get(compteurCurseurBefor).active=false;
				}
				
			}
			
			else if(afficher_liste_objets){
				
				compteurCurseurBefor=compteurCurseur;
				
				if(clavier.keyToutJusteAppuie(KeyEvent.VK_UP) && compteurCurseurY>0 && compteurCurseur>0 && compteurCurseur<liste_objets.size()) {
					yCurseur-=120;
					compteurCurseur-=5;
					compteurCurseurY-=1;
				}else if(clavier.keyToutJusteAppuie(KeyEvent.VK_DOWN) && compteurCurseurY<3 && compteurCurseur>=0 && compteurCurseur<liste_objets.size()-5) {
					yCurseur+=120;
					compteurCurseur+=5;
					compteurCurseurY+=1;
				}else if(clavier.keyToutJusteAppuie(KeyEvent.VK_LEFT) && compteurCurseurX>0 && compteurCurseur>0 && compteurCurseur<liste_objets.size()) {
					xCurseur-=120;
					compteurCurseur-=1;
					compteurCurseurX-=1;
				}else if(clavier.keyToutJusteAppuie(KeyEvent.VK_RIGHT) && compteurCurseurX<4 && compteurCurseur>=0 && compteurCurseur<liste_objets.size()-1) {
					xCurseur+=120;
					compteurCurseur+=1;
					compteurCurseurX+=1;
				}else if(clavier.keyToutJusteAppuie(KeyEvent.VK_LEFT)) {
					xCurseur =  100 ;
					yCurseur = 300 ;
					compteurCurseur = 0 ; 
					compteurCurseurX = 0;
					compteurCurseurY = 0;
					afficher_liste_nourriture = false;
					afficher_liste_ressources = false ;
					afficher_liste_armes = false ;
					afficher_liste_equipements = true ;
					afficher_liste_objets = false;
				}else if(clavier.keyToutJusteAppuie(KeyEvent.VK_RIGHT)) {
					xCurseur =  100 ;
					yCurseur = 300 ;
					compteurCurseur = 0 ; 
					compteurCurseurX = 0;
					compteurCurseurY = 0;
					afficher_liste_nourriture = true;
					afficher_liste_ressources = false ;
					afficher_liste_armes = false ;
					afficher_liste_equipements = false ;
					afficher_liste_objets = false;
					
				}
				
				liste_objets.get(compteurCurseur).active=true; 
				    
				if(compteurCurseur!=compteurCurseurBefor){
					liste_objets.get(compteurCurseurBefor).active=false; 
				}
			}
		
			if(clavier.fermerInventaire){
				
				jeu.fenetre_JEU.show=true;
				this.show=false;
			}
			
			fond = jeu.fenetre_JEU.screen ;
			
			
			addKeyListener(clavier);
			
			repaint();
		}	
	}
		  
}
