/**
* Meteo
*
* @author Sonia Seddiki and Stanislas Michalak
*/

package meteo.presentation;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

import meteo.abstraction.TemperatureModel;
import meteo.control.ButtonController;
import meteo.control.CelsiusJTextFieldController;
import meteo.control.CitiesListController;
import meteo.control.FahrenheitJTextFieldController;
import meteo.control.PictureController;

public class Meteo extends JFrame {
  
  private TemperatureModel model;
  
  /**
  * Init "Meteo" window
  * @param TemperatureModel model
  */
  public Meteo(TemperatureModel model) {
  	super("Météo NOM Prénom");
    this.setSize(450,400);
    this.setResizable(false);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.setLocationRelativeTo(null);
    this.setModel(model);
    buildInterface();
    this.setVisible(true);
  }
  
  /**
  * Set temperature model 
  * @param TemperatureModel model
  */
  public void setModel(TemperatureModel model) {
	this.model = model;  	
  }
  
  /**
  * Build user interface
  * @return void
  */
  public void buildInterface() {
  	JPanel cPanel = new JPanel();
  	this.setContentPane(cPanel);
    cPanel.setLayout(new BorderLayout());
    
    JLabel cL = new JLabel("Celsius : ");
    JLabel fL = new JLabel("Fahrenheit : ");
    
    //Create celsius JTextField and bind listener/observer pair
    JTextField celsius = new JTextField();
    celsius.setPreferredSize(new Dimension(50,20));
    CelsiusJTextFieldController celsiusC = new CelsiusJTextFieldController(this.model, celsius);
    celsius.addActionListener(celsiusC);
    this.model.addObserver(celsiusC);
    
    //Create fahrenheit JTextField and bind listener/observer pair
    JTextField fahr = new JTextField();
    fahr.setPreferredSize(new Dimension(50,20));
    FahrenheitJTextFieldController fahrC = new FahrenheitJTextFieldController(this.model, fahr);
    fahr.addActionListener(fahrC);
    this.model.addObserver(fahrC);
       
    //Top
    JPanel hPanel = new JPanel(new FlowLayout());
    hPanel.add(cL);
    hPanel.add(celsius);
    hPanel.add(fL);
    hPanel.add(fahr);
    cPanel.add(hPanel, BorderLayout.PAGE_START);
    
	//Left
	JList<String> list = new JList<String>(this.model.getCities());
    CitiesListController citiesListC = new CitiesListController(this.model, list);
    list.addListSelectionListener(citiesListC);
    JScrollPane sc = new JScrollPane(list);
    sc.setPreferredSize(new Dimension(200, 200));
	cPanel.add(sc, BorderLayout.LINE_START); 
    
    //Right
    JLabel img = new JLabel("Sélectionnez une ville", SwingConstants.CENTER);
    img.setPreferredSize(new Dimension(250, 200));
    PictureController picControl = new PictureController(this.model, img);
    this.model.addObserver(picControl);
    cPanel.add(img, BorderLayout.LINE_END);
    
    //Bottom
    JButton avgBtn = new JButton("Calculer Moyenne");
    avgBtn.setBackground(Color.BLUE);
    avgBtn.setForeground(Color.WHITE);
    ButtonController btnController = new ButtonController(this.model);
    avgBtn.addActionListener(btnController);
    
    JPanel bPanel = new JPanel(new GridLayout(1, 2, 20, 20));
    JLabel empty = new JLabel("  ");
    bPanel.add(avgBtn);
    bPanel.add(empty);
    cPanel.add(bPanel, BorderLayout.PAGE_END);    
  }
	
}
