import java.awt.*;
import java.awt.geom.Ellipse2D;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.sql.*;
/*
 *BddFrame est la partie graphique du projet
 * @author Juba Hamid et Adrien Taieb
 * @version 1
 */
public class BddFrame extends JFrame{
    static Graphics2D g;
    Texte [] textes;
	Bdd bdd;

    public BddFrame() {
    	bdd=new Bdd();
		setTitle("Voyages || "+date());
        setSize(new Dimension(1024,768));
    	tests();
    	choixville();
		ajoutermenu();
    	setVisible(true);
        this.addWindowListener(
            new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            }
        );
    }
    /*
     *affiche la page d'accueil
     */
    public void choixville(){
		setContentPane(new JPanel(){
			public void paintComponent(Graphics p){
        		Image img = new ImageIcon(getClass().getResource("france.jpg")).getImage();
        		p.drawImage(img,250,10,535,584,this);
    	 		g=(Graphics2D)p;
    			g.setFont(new Font("Arial",Font.ITALIC,14));
    			for(int i=0;i<textes.length;i++){
    				if(textes[i].menu == "choixville")
    					g.drawString(textes[i].texte,textes[i].x,textes[i].y);
    			}
    		}
    	});
    	affichervilles();
    }
    public void afficherTextes(String menu){
    	final String menuu=menu;
		setContentPane(new JPanel(){
			public void paintComponent(Graphics p){
        		g=(Graphics2D)p;
    			g.setFont(new Font("Arial",Font.ITALIC,14));
    			for(int i=0;i<textes.length;i++){
    				if(textes[i].menu == menuu)
    					g.drawString(textes[i].texte,textes[i].x,textes[i].y);
    			}
    		}
    	});
    }
	public void affichervilles(){
		try{
			bdd.connection();
			ResultSet rs = bdd.requete("select * from Ville");
			while(rs.next()){
				ajouterville(rs.getObject("nom").toString(),rs.getInt("x"),rs.getInt("y"));
			}
		}
		catch(Exception e){
			e.printStackTrace();
		}
	}
	public void afficherhotels(String ville){
		JPanel pane = new JPanel();
		GridLayout gl = new GridLayout(0,2);
		gl.setHgap(5);
		gl.setVgap(5);
		pane.setLayout(gl);
		/*JEditorPane jep = new JEditorPane();
		jep.setText("salut ma poule et \ntout et tout");
		jep.setEditorKit(null);
		pane.add(jep);*/
		//pane.add(new JLabel("<html>Grand Hotel de Paris<hr>Un charme exceptionnel<br>pour cet hotel de grand standing<br>avec vue sur la Tour Eiffel</html>"));
		//pane.add(new JLabel(new ImageIcon("images/hotelparis.jpg")));
		
		bdd.connection();
		try{
			//modifier la requète pour n'afficher que les hotels où il reste des chambres aux dates indiquées
			ResultSet rs = bdd.requete("select * from Hotel where ville='"+ville+"'");
			ResultSetMetaData metadata = rs.getMetaData();
			int cols = metadata.getColumnCount();
			while(rs.next()){
				final String nom = rs.getObject("nom").toString();
				String hotel = "<html>"+nom+" - Etoiles : ";
				for(int i=0;i<rs.getInt("etoiles");i++)
					hotel+="*";
				hotel+=("<br><font color=gray size=2>"+rs.getObject("adresse").toString()+"</font><hr>"
					+rs.getObject("commentaire").toString()+"</html>");
				JPanel texte = new JPanel();
				texte.add(new JLabel(hotel));
				pane.add(texte);
				JPanel pano = new JPanel();
				ImageIcon ii = new ImageIcon("images/"+rs.getObject("photo").toString());
				JButton photo = new JButton(ii);
				photo.setMargin(new Insets(0,0,0,0));
				final String ville2=ville;
				photo.addActionListener(new ActionListener(){
					public void actionPerformed(ActionEvent e){
 			      		//JPanel panel = new JPanel();
 			      		try{
 			      			reserverHotel(nom,ville2);
        					//panel.add(new JLabel(nom+" - "+ville2,SwingConstants.CENTER));
 			      		}catch(Exception ee){System.out.println(ee.toString());}
	    	    		//setContentPane(panel);
    	    			//setVisible(true);
    	    		}
        		});
        		pano.add(photo);
				pane.add(pano);
			}
		}
		catch(Exception e){
			e.printStackTrace();
		}
		
		pane.setBounds(250,50,600,700);
		setContentPane(new JPanel());
        getContentPane().setLayout(null);
        JLabel jlb = new JLabel("Les hotels de la ville de "+ville);
        jlb.setBounds(200,10,300,30);
        getContentPane().add(jlb);
        getContentPane().add(pane);
		setVisible(true);
	}

	public void reserverHotel(String nomHotel,String nomVille){
		try{
		JPanel pane = new JPanel();
		bdd.connection();
		ResultSet rs = bdd.requete("select * from Hotel where nom='"+nomHotel+"' and ville='"+nomVille+"'");
		rs.next();
		String hotel = "<html>"+nomHotel+" - Etoiles : ";
		for(int i=0;i<rs.getInt("etoiles");i++) hotel+="*";
		hotel+=("<br><font color=gray size=2>"+rs.getObject("adresse").toString()+"</font><hr>"
				+rs.getObject("commentaire").toString()+"<br><i>Plus d'info sur "+rs.getObject("site").toString()+"</i></html>");
		JPanel texte = new JPanel();
		texte.add(new JLabel(hotel));
		pane.add(texte);
		final ResultSet rss = rs;
		JPanel pano = new JPanel(){
			public void paintComponent(Graphics p){
				try{
        		Image img = new ImageIcon("images/"+rss.getObject("photo").toString()).getImage();
        		p.drawImage(img,0,0,this);//,137,103
    	 		g=(Graphics2D)p;
				}
				catch(Exception e){
					System.out.println(e.toString());
				}
    		}
    	};
    	//a finir pour que ça affiche bien
		//pane.add(pano);
		setContentPane(pano);
		setVisible(true);
		}
		catch(Exception e){
			System.out.println(e.toString());
		}
	}

    public void ajouterville(String nom, int x, int y){
    	getContentPane().setLayout(null);
    	final JButton ville = new JButton(nom);
		ville.setForeground(Color.red);
		ville.setFocusPainted(false);
		ville.setBorderPainted(false);
		ville.setContentAreaFilled(false);
		int taille = nom.length()*13;
		ville.setBounds(x,y,taille,25);
		ville.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				afficherhotels(ville.getAccessibleContext().getAccessibleName());
        	}
        });
        getContentPane().add(ville);
    }
	
	public JTable afficherRequete(String requete){
		bdd.connection();
		try{
			ResultSet rs = bdd.requete(requete);
			ResultSetMetaData metadata = rs.getMetaData();
			int cols = metadata.getColumnCount();
			String[] colonnes = new String[cols];
			for(int i = 1 ; i <= cols ; i++){
				colonnes[i-1]=metadata.getColumnName(i)+"("+metadata.getColumnTypeName(i)+")";
			}
			Object [][] data = new Object [2][cols];
			int ligne=0;
			while(rs.next()){
				for(int i = 1 ; i <= cols ; i++){
					if(rs.getObject(i)!=null)
						data[ligne][i-1] = (rs.getObject(i)).toString();
				}
				ligne++;
			}
			JTable table = new JTable(data, colonnes);
			return table;
		}
		catch(Exception e){
			e.printStackTrace();
			return null;
		}
	}
	
	public void tests(){
    	textes = new Texte[2];
    	textes[0] = new Texte("Pour effectuer une réservation",260,35,"choixville");;
    	textes[1] = new Texte("sélectionnez une ville sur la carte",260,55,"choixville");;
	}

	public void ajoutermenu(){
		MenuBar menuBar = new MenuBar();
        Menu menuExecuter = new Menu("Executer");
        Menu menuAide = new Menu("Aide");
	
		MenuItem menuExecuterAfficher = new MenuItem("Afficher");
        MenuItem menuExecuterChoixville = new MenuItem("Effectuer une réservation");
        MenuItem menuExecuterExit = new MenuItem("Quitter");
        MenuItem menuAideCredits = new MenuItem("Crédits");
        
        menuAideCredits.addActionListener(new ActionListener(){
        	public void actionPerformed(ActionEvent e){
        		JPanel pane = new JPanel();
        		pane.add(new JLabel("Fait par Juba et Adrien",SwingConstants.CENTER));
        		BddFrame.this.setContentPane(pane);
        		BddFrame.this.setVisible(true);
        	}
        });
        menuExecuterAfficher.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
            	BddFrame.this.repaint();
            	BddFrame.this.setContentPane(new JPanel(){
            		public void paintComponent(Graphics p){
    					g=(Graphics2D)p;
    					g.setColor(Color.BLACK);
    				}
    			});
        		BddFrame.this.setVisible(true);
            }
        }); 
        menuExecuterChoixville.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
            	BddFrame.this.repaint();
            	choixville();
        		BddFrame.this.setVisible(true);
            }
        }); 
        menuExecuterExit.addActionListener
        (
            new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    System.exit(0);
                }
            }
        ); 
        menuExecuter.add(menuExecuterChoixville);
        menuExecuter.add(menuExecuterAfficher);
        menuExecuter.add(menuExecuterExit);
        menuAide.add(menuAideCredits);
        menuBar.add(menuExecuter);
        menuBar.add(menuAide);
		setMenuBar(menuBar);
	}

	public static String date(){
		String s = "nous sommes le "+(new GregorianCalendar()).get(Calendar.DAY_OF_MONTH);
		s+="/"+((new GregorianCalendar()).get(Calendar.MONTH)+1);
		s+=("/"+(new GregorianCalendar()).get(Calendar.YEAR));
		return s;
	}
		
    public static void main(String [] args){
    	BddFrame programme = new BddFrame();
    }
			
}
 
class Texte{
	String texte;
	int x;
	int y;
	String menu;
	//constructeur pour les villes
	Texte(String s, int xx, int yy){
		texte = s;
		x=xx;
		y=yy;
	}
	Texte(String s, int xx, int yy, String menuu){
		texte = s;
		x=xx;
		y=yy;
		menu=menuu;
	}
}
