import javax.swing.*;
import java.awt.*;

import java.awt.event.*;

import javax.*;

import java.io.*;


public class PanneauJeu extends JPanel implements KeyListener{
	//"./fonts/VIKING.TTF"
	
	//FileInputStream fin;
	
	//Font police;
	
	
	private Font police=new Font("Arial",Font.BOLD,12);
	
	
	
	//////////////////
	
	TerrainPanel terrainPanel;
	
	
	ResumeStatsPanel resumestatsPanel=new ResumeStatsPanel(this);
	MessagesPanel messagesPanel=new MessagesPanel(this);
	
	//EquipementPanel equipementpanel=new EquipementPanel(this);
	EquipementPanel equipementpanel;
	
	
	boolean fondAleatoire=false;
	
	
	MapJPanel mapPanel=new MapJPanel();
	
	CryptRL leJeu;
	
	private ImageIcon fond;
	private ImageIcon fondDep;
	private ImageIcon logo;
	
	boolean lang=true; //true= eng   false=fr
	
	
	
	
	
		
	public PanneauJeu(CryptRL game){
		
		/*
		try{	
			fin = new FileInputStream("./fonts/VIKING.TTF");
		
			police = Font.createFont(Font.TRUETYPE_FONT, fin);
		}
		catch(Exception ex){}
		*/
		
		
		
		
		leJeu=game;
		
		setLayout(null);
		
		resumestatsPanel.setBounds(5,10,165,650);
		add(resumestatsPanel);
		
		
		
		
		
		//equipementpanel.setBounds(817,10,195,450);
		//add(equipementpanel);
		
		/////
        //tabbedPane.addTab("", icon, equipementpanel);
        //tabbedPane.addTab("", icon2, magicpanel);
        //tabbedPane.setBounds(817,10,195,450);
        //add(tabbedPane);
		////
		
		
		
		
		
		mapPanel.setBounds(815,465,200,200);
		add(mapPanel);
		
		messagesPanel.setBounds(172,500,640,160);
		add(messagesPanel);
		
		
		fond=new ImageIcon("./images/forest_7.jpg");
		
		
		if((Math.random()*100)+1<50){
			fondAleatoire=true;
		}
		
		if(fondAleatoire){
			fondDep=new ImageIcon("./images/fonddepart.jpg");
			logo=new ImageIcon("./images/logo.gif");
		}
		else{fondDep=new ImageIcon("./images/fonddepart2.jpg");
		}
		
		this.addKeyListener(this);	
		
		this.setFocusable(true);
		
		
		
	}
	
	
	protected static ImageIcon createImageIcon(String path) {
        java.net.URL imgURL = PanneauJeu.class.getResource(path);
        if (imgURL != null) {
            return new ImageIcon(imgURL);
        } else {
            System.err.println("Couldn't find file: " + path);
            return null;
        }
    }
	
	
	public void paintComponent (Graphics g){
		fond.paintIcon(this,g,0,0);
		fondDep.paintIcon(this,g,172,10);
		if(fondAleatoire){logo.paintIcon(this,g,406,190);}
	}
	
	
	
	
	public void update(Graphics g){	
		paintComponent(g);
		
		
		requestFocus();
	}
	
	
	
	
	
	public void keyPressed(KeyEvent e){
		
		char lettre=e.getKeyChar();
		
		if(!leJeu.monde.perso.getMort() && (leJeu.jeuInit||leJeu.jeuInit2)){
			
			
			//System.out.println(lettre);
			
			
			if(lettre=='8'){leJeu.monde.perso.mouvement(8);}
			if(lettre=='2'){leJeu.monde.perso.mouvement(2);}
			if(lettre=='6'){leJeu.monde.perso.mouvement(6);}
			if(lettre=='4'){leJeu.monde.perso.mouvement(4);}
			
			if(lettre=='7'){leJeu.monde.perso.mouvement(7);}
			if(lettre=='9'){leJeu.monde.perso.mouvement(9);}
			if(lettre=='3'){leJeu.monde.perso.mouvement(3);}
			if(lettre=='1'){leJeu.monde.perso.mouvement(1);}
			
			
			//////////////////////////////TIR
			///TEST DE TIR VISUEL
			//if(lettre=='g'){
			//	terrainPanel.paramTirRender(288,224,640,480,"./images/comestible/potionrouge.gif");
			//}
			//////////////////////////////TIR
			
			
			if(lettre=='h'&& !e.isAltDown()){
				if(leJeu.monde.perso.getStealthmode()){
					leJeu.monde.perso.setStealthmode(false);
					leJeu.monde.message("Stealth Mode Off",true);
					leJeu.monde.message("Fin du mode discretion",false);
				}
				else{
					leJeu.monde.perso.setStealthmode(true);
					leJeu.monde.message("Stealth Mode On",true);
					leJeu.monde.message("Mode discretion",false);
				}
				
			}
			
			
			////acces à la liste des sorts.
			if(lettre=='z'){
				
				leJeu.monde.perso.afficheGrimoire();
				//leJeu.monde.jeuPan.equipementpanel.updateEquipementList(leJeu.monde,leJeu.monde.perso.getMemSorts());

            }
			
			if(lettre=='Z'){
				leJeu.monde.perso.spellCasting();
				//System.out.println("SPELLCASTING");
			}
			
			
			
			
			if(lettre==' '){
				//leJeu.monde.tourMonde();
				leJeu.monde.perso.testerCompteurRapidite();
			}
			
			
			
			if(lettre=='o'){
				//System.out.println("OUVERTURE");
				
				leJeu.monde.perso.ouverture("open");
			}
			
			if(lettre=='c'){
				//System.out.println("FERMETURE");
				
				leJeu.monde.perso.ouverture("close");
			}
			
			if(lettre=='d'){
				//System.out.println("DROP");
				
				leJeu.monde.perso.drop();
			}
			
			if(lettre=='D'){
				//System.out.println("DROP");
				
				leJeu.monde.perso.directionaldrop();
			}
			
			
			if(lettre==','){
				//System.out.println("GET");
				
				leJeu.monde.perso.get();
			}
			
			
			if(lettre=='w'){
				//System.out.println("Equip arme");
				leJeu.monde.perso.equipArme();
			}
			
			if(lettre=='W'){
				//System.out.println("Equip armure");
				leJeu.monde.perso.equipArmure();
			}
			
			if(lettre=='x'){
				//System.out.println("desequipe arme");
				leJeu.monde.perso.desequipArme();
			}
			
			if(lettre=='T'){
				//System.out.println("desequipe armure");
				leJeu.monde.perso.desequipArmure();
			}
			
			if(lettre=='+'){
				leJeu.monde.perso.parade(true);
			}
			
			if(lettre=='-'){
				leJeu.monde.perso.parade(false);
			}
			
			if(lettre=='a'){
				leJeu.monde.perso.apply();
			}
			
			if(lettre=='k'){
				leJeu.monde.perso.kick();
			}
			
			if(lettre=='q'){
				leJeu.monde.perso.boire();
			}
			
			if(lettre=='e'){
				leJeu.monde.perso.manger();
			}
			
			if(lettre=='l' && !e.isAltDown()){
				leJeu.monde.perso.loot();
			}
			
			if(lettre=='>'){
				leJeu.monde.perso.descendre();
			}
			
			if(lettre=='<'){
				leJeu.monde.perso.monter();
			}
			
			if(lettre=='s'){
				leJeu.monde.perso.chercher();
			}
			
			if(lettre=='r'){
				leJeu.monde.perso.lire();
			}
			
			if(lettre=='u' && e.isAltDown()){
				//System.out.println("Activer/Desactiver piege");
				leJeu.monde.perso.activerDesactiver();
			}
			
			if(lettre=='S'){
				leJeu.monde.saveGame();
			}
			
			if(lettre=='L'){
				
				if(!leJeu.jeuInit2){
					
					leJeu.monde=new Monde(this,leJeu.cat);
					
					leJeu.monde.perso=new Personnage(leJeu.monde,new String(),new String(),0,0,0,0,0,0,0,0,0,0,0,0,0,0);
					this.resumestatsPanel.nomTxt.setText(leJeu.monde.perso.getNom());
					leJeu.monde.jeuPan=this;
					leJeu.chargementPremierTerrainPERSO(new String());
					
					this.terrainPanel=new TerrainPanel(leJeu);
					this.terrainPanel.setBounds(172,10,640,480);
					this.add(this.terrainPanel);
					
					this.equipementpanel=new EquipementPanel(leJeu);
					this.equipementpanel.setBounds(817,10,195,450);
					this.add(this.equipementpanel);
					
					
				}
				
				
				
				leJeu.monde.losOn=true;
				new DialogLoadGame(leJeu.monde);
			}
			
			if(lettre=='?'){
				new PanneauRaccourcis();
			}
			
			if(lettre==';'){
				//System.out.println("Regarder");
				leJeu.monde.perso.regarder();
			}
			
			if(lettre=='f'){
				//System.out.println("lancer");
				leJeu.monde.perso.lancer();
			}
			
			if(lettre=='l' && e.isAltDown()){
				if(lang){lang=false;
					leJeu.monde.message("FRANCAIS",false);
					//equipementpanel.updateEquipementList(leJeu.monde,leJeu.monde.perso.equipementVect);
					
				}
				else{lang=true;
					leJeu.monde.message("ENGLISH",true);
					//equipementpanel.updateEquipementList(leJeu.monde,leJeu.monde.perso.equipementVect);
				}
				//System.out.println(lang);
				updateStatPanelLang(lang);
			}
			
			
			if(lettre=='ù' && e.isAltDown()){
				leJeu.monde.perso.setConstitution(5000);
				leJeu.monde.perso.setIntelligence(5000);
				leJeu.monde.perso.setDexterite(5000);
				leJeu.monde.perso.setForce(5000);
				
				leJeu.monde.perso.setMagieLvl(100);
				leJeu.monde.perso.setCurrentPower(leJeu.monde.perso.getMaxPower());
				
				leJeu.monde.message("CHEATER !!",true);
				leJeu.monde.message("TRICHEUR !!",false);
				
			}
			
			if(lettre=='A'){
				leJeu.monde.perso.activer();
			}
			
			if(lettre=='v' && !e.isAltDown()){
				leJeu.monde.perso.vomir();
				
			}
			
			
			/////ARBRES
			if(lettre=='t'){
				if(leJeu.monde.reinerTrees){
					leJeu.monde.reinerTrees=false;
				}
				else{
					leJeu.monde.reinerTrees=true;
				}
				
				
				
				//repaint();
			}
			
			//////INVENTAIRE
			if(lettre=='i'){
				leJeu.monde.perso.afficheInventaire();
			}
			
			
			//////BRUITS DE PAS
			if(lettre=='p' && e.isAltDown()){
				if(leJeu.monde.bruitPas){
					leJeu.monde.bruitPas=false;
					leJeu.monde.message("Step Sounds OFF",true);
					leJeu.monde.message("Bruit des pas OFF",false);
				}
				else{
					leJeu.monde.bruitPas=true;
					leJeu.monde.message("Step Sounds ON",true);
					leJeu.monde.message("Bruit des pas ON",false);
				}
				
			}
			
			
			
			/////////ZOOM///////////
			if(lettre=='v' && e.isAltDown()){
				if(leJeu.monde.zoom>=32){
					leJeu.monde.zoom=leJeu.monde.zoom-32;
				}
				else{
					leJeu.monde.zoom=0;
				}
				leJeu.monde.message("Zoom out "+leJeu.monde.zoom,true);
				leJeu.monde.message("Zoom out "+leJeu.monde.zoom,false);
			}
			
			if(lettre=='b' && e.isAltDown()){
				leJeu.monde.zoom=leJeu.monde.zoom+32;
				leJeu.monde.message("Zoom in "+leJeu.monde.zoom,true);
				leJeu.monde.message("Zoom in "+leJeu.monde.zoom,false);
			}
			
			if(lettre=='n' && e.isAltDown()){
				leJeu.monde.zoom=0;
				leJeu.monde.message("Zoom "+leJeu.monde.zoom,true);
				leJeu.monde.message("Zoom "+leJeu.monde.zoom,false);
			}
			////////////////////////////////
			
			
			/////BARRE DE SANTE DES PNJS
			
			if(lettre=='h'&& e.isAltDown()){
				if(!leJeu.monde.npcDisplayHealthBar){
					leJeu.monde.npcDisplayHealthBar=true;
					
					leJeu.monde.message("Npcs health bar ON",true);
					leJeu.monde.message("Barre de sante des pnjs ON",false);
					
					
				}
				else{
					leJeu.monde.npcDisplayHealthBar=false;
					leJeu.monde.message("Npcs health bar OFF",true);
					leJeu.monde.message("Barre de sante des pnjs OFF",false);
				}
			}
			
			
			////////////////////////////////
			////////////////////////////////
			////////////////////////////////
			
			
			if(lettre=='g' && e.isAltDown()){
				leJeu.monde.message("Garbage Collector",true);
				leJeu.monde.message("Garbage Collector",false);
				Runtime.getRuntime().gc();
			}
			
			
			
			// + et - TESTS POUR L'ECLAIRAGE
			if(lettre=='='){
				leJeu.monde.losOn=true;
				//terrainPanel.repaint();
				//repaint();
			}
			if(lettre==')'){
				leJeu.monde.losOn=false;
				//terrainPanel.repaint();
				//repaint();
			}
			
			
			/*
			if(lettre=='u' && !e.isAltDown()){
				int vue=leJeu.monde.perso.getVue();// 
				if(vue>0){
					vue--;
					leJeu.monde.perso.setVue(vue);
					
					//System.out.println("VUE= "+leJeu.monde.perso.getVue());
					
					//terrainPanel.repaint();
					//repaint();
					
				}
				
			}
			if(lettre=='i'){
				int vue=leJeu.monde.perso.getVue();
				if(vue<4){
					vue++;
					leJeu.monde.perso.setVue(vue);
					
					//System.out.println("VUE= "+leJeu.monde.perso.getVue());
					
					//terrainPanel.repaint();
					//repaint();
				}
			}*/
			
			
			if(lettre=='j'){
				leJeu.monde.setNuit(false);
				leJeu.monde.miseAJourResumeStatsPanel();
				//terrainPanel.repaint();
				//repaint();
			}
			
			if(lettre=='n'&& !e.isAltDown()){
				leJeu.monde.setNuit(true);
				leJeu.monde.miseAJourResumeStatsPanel();
				//terrainPanel.repaint();
				//repaint();
			}
			
			
		}
		////////////////////////////////
		////////////////////////////////
		////////////////////////////////
		
		
	}
	
	
	public void keyReleased(KeyEvent e){}
	
	public void keyTyped(KeyEvent e){}
	
	
	public void updateStatPanelLang(boolean lg){
		
		if(lg){
			leJeu.monde.jeuPan.resumestatsPanel.niveauLbl.setText("Level");
			leJeu.monde.jeuPan.resumestatsPanel.forceLbl.setText("ST");
			leJeu.monde.jeuPan.resumestatsPanel.vieActuelleLbl.setText("Hits");
			leJeu.monde.jeuPan.resumestatsPanel.rapiditeLbl.setText("Speed");
			leJeu.monde.jeuPan.resumestatsPanel.faimLbl.setText("Hunger");
			leJeu.monde.jeuPan.resumestatsPanel.skillNiv.setText("Lvl");
			leJeu.monde.jeuPan.resumestatsPanel.discretion.setText("Stealth");
			leJeu.monde.jeuPan.resumestatsPanel.magie.setText("Magic");
			leJeu.monde.jeuPan.resumestatsPanel.crocheter.setText("LockPick.");
			leJeu.monde.jeuPan.resumestatsPanel.pieges.setText("Traps");
			leJeu.monde.jeuPan.resumestatsPanel.baratin.setText("FastTalk");
			leJeu.monde.jeuPan.resumestatsPanel.paradeLbl.setText("Parry");
			
		}
		else{
			leJeu.monde.jeuPan.resumestatsPanel.niveauLbl.setText("Niveau");
			leJeu.monde.jeuPan.resumestatsPanel.forceLbl.setText("FO");
			leJeu.monde.jeuPan.resumestatsPanel.vieActuelleLbl.setText("PtsVie");
			leJeu.monde.jeuPan.resumestatsPanel.rapiditeLbl.setText("Rapidite");
			leJeu.monde.jeuPan.resumestatsPanel.faimLbl.setText("Faim");
			leJeu.monde.jeuPan.resumestatsPanel.skillNiv.setText("Niv");
			leJeu.monde.jeuPan.resumestatsPanel.discretion.setText("Discretion");
			leJeu.monde.jeuPan.resumestatsPanel.magie.setText("Magie");
			leJeu.monde.jeuPan.resumestatsPanel.crocheter.setText("Crocheter.");
			leJeu.monde.jeuPan.resumestatsPanel.pieges.setText("Pieges");
			leJeu.monde.jeuPan.resumestatsPanel.baratin.setText("Baratin");
			leJeu.monde.jeuPan.resumestatsPanel.paradeLbl.setText("Parade");
			
		}
		
		
	}
	
	public Font getPolice(){
		
		try
	    {
	        File file = new File("./fonts/Berylium.ttf");
			FileInputStream fis = new FileInputStream(file);
			police = Font.createFont(Font.TRUETYPE_FONT, fis);
	        fis.close();
	    }
	    catch(Exception e)
	    {
	        e.printStackTrace();
	    }
		
		police = police.deriveFont(Font.BOLD,12f);
		
		
		return police;
	}
	
	
}


