/**
 * 
 */
package view.vuePlan.vueChambrePanel;

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.HashMap;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.border.Border;

import view.Vue;
import database.dataset.Chambre;

/**
 * @author alexis
 *
 */
public class ChambrePanel extends Vue implements MouseListener{
	/**
	 * 
	 */
	private static final long serialVersionUID = 7000293276759436489L;
	private HashMap<Integer,Color> status;
	private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
	private boolean isSelected = false;
	private final Border notSelectedBorder = BorderFactory.createLineBorder(Color.black);
	private final Border selectedBorder = BorderFactory.createLineBorder(Color.black,3);
	private JLabel labelNom = new JLabel();
	private JLabel labelPrenom = new JLabel();
	private JLabel labelNextDate = new JLabel();
	private JLabel labelButton = new JLabel();
	private int ID;
	
	/**
	 * constructeur
	 * @param nbChambre
	 * @param isLabelDisplayedAbove
	 */
	public ChambrePanel(int nbChambre, boolean isLabelDisplayedAbove){
		ID = nbChambre;
		createColorChart();
		generateVisual(nbChambre,isLabelDisplayedAbove);
	}
	
	private void createColorChart(){
		status = new HashMap<Integer,Color>();
		
		status.put(1, Color.green);
		status.put(2, Color.orange);
		status.put(3, Color.red);
		status.put(4, Color.yellow);
		status.put(5, Color.magenta);
		status.put(6, Color.pink);
		status.put(8, Color.blue);
		status.put(10, Color.gray);
		status.put(11, Color.gray);
	}
	
	/**
	 * genere la visuel
	 * @param isLabelDisplayedAbove
	 */
	private void generateVisual(int nbChambre, boolean isLabelDisplayedAbove){
		this.setLayout(new GridLayout(2,1));
		labelButton.setLayout(new GridLayout(3,1));
		labelButton.add(labelNom);
		labelButton.add(labelPrenom);
		labelButton.add(labelNextDate);
		labelButton.setBorder(notSelectedBorder);
		labelButton.setOpaque(true);

		if(isLabelDisplayedAbove)
		{
			this.add(new JLabel(""+nbChambre));
			this.add(labelButton);
		}
		else
		{
			this.add(labelButton);
			this.add(new JLabel(""+nbChambre));
		}
		
		labelButton.addMouseListener(this);
	}
	
	/**
	 * met a jour le visuel
	 */
	public void updateVisual(int status){
		if(this.status.get(status) != null)
			labelButton.setBackground(this.status.get(status));
		else
			labelButton.setBackground(Color.black);
	}
	
	/**
	 * met a jour les bordures
	 */
	public void updateBorder(){
		if(isSelected)
		{
			labelButton.setBorder(selectedBorder);
		}
		else
		{
			labelButton.setBorder(notSelectedBorder);
		}
	}
	
	public int getID(){
		return ID;
	}

	/**
	 * @param nom the nom to set
	 */
	public void setNom(String nom) {
		/*if(nom.length() > 3)
			nom = nom.substring(0,4);*/
		labelNom.setText(nom);
	}

	/**
	 * @param prenom the prenom to set
	 */
	public void setPrenom(String prenom) {
		/*if(prenom.length() > 3)
			prenom = prenom.substring(0,4);*/
		labelPrenom.setText(prenom);
	}

	/**
	 * @param nextTimeFree the nextTimeFree to set
	 */
	public void setNextTimeFree(Date nextTimeFree) {
		String date = nextTimeFree.toString();
		date = date.substring(5);
		labelNextDate.setText(date);
	}
	
	/**
	 * @param status the status to set
	 */
	public void setStatus(int status) {
		updateVisual(status);
	}

	/**
	 * @param isSelected the isSelected to set
	 */
	public void setSelected(boolean isSelected) {
		this.isSelected = isSelected;
		updateBorder();
	}

	@Override
	public void mouseClicked(MouseEvent arg0) {}

	@Override
	public void mouseEntered(MouseEvent arg0) {}

	@Override
	public void mouseExited(MouseEvent arg0) {}

	@Override
	public void mousePressed(MouseEvent arg0) {
		this.getObservable().notifyObservers(this);
	}

	@Override
	public void mouseReleased(MouseEvent arg0) {}
	
	public static void main(String[] args) {
		JFrame a = new JFrame();
		a.setLayout(new GridLayout(2,1));
		Chambre[] chamb = new Chambre[2];
		chamb[0] = new Chambre(1,
				   2, true,1,
				   "", 101);
		chamb[1] = new Chambre(1,
				   2, true,1,
				   "", 102);
		ChambrePanel b = new ChambrePanel(101, true);
		b.setNom("A");System.out.println("Is set green");
		b.setPrenom("B");
		//b.setNextTimeFree(Calendar.getInstance());
		b.setStatus(1);
		
		ChambrePanel c = new ChambrePanel(101, true);
		c.setNom("A");System.out.println("Is set green");
		c.setPrenom("B");
		//c.setNextTimeFree(Calendar.getInstance());
		c.setStatus(1);
		
		a.setSize(200,200);
        a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		a.setVisible(true);
		a.add(b);
		a.add(c);
		b.setNom("HERE");
	}
}
