package SE4.presentation;
import java.awt.*;
import java.util.ArrayList;
import java.util.Observable;

import javax.swing.*;
import javax.swing.border.LineBorder;

import SE4.abstraction.Album;
import SE4.controlleur.ControlJButtons;
import SE4.controlleur.ControlJButtons2;
import SE4.controlleur.ControlJLabel;
import SE4.controlleur.ControlJMenu;
import SE4.controlleur.ControlJSlider;
import SE4.controlleur.ControlList;

public class AlbumPhoto extends JFrame{
	Album modele ;

	public AlbumPhoto(Album album){
		super("TP4");
		this.getContentPane().setLayout(new BorderLayout());
		this.setSize(new Dimension(1000,800));
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setTitle("Album");
		this.setVisible(true);
		this.modele=album;
		this.creerCentre();
		this.creerBot();
		this.creerTop();
		this.creerLeft();
		this.creerRight();
		this.creerMenu();
		pack();
		
	}

	private void creerRight() {
		JPanel slide = new JPanel();
		JSlider slider = new JSlider(JSlider.VERTICAL,0,500,100);
		
		slide.add(slider);
		slide.setSize(100,800);
		slider.setMajorTickSpacing(100);
		slider.setMinorTickSpacing(10);
		slider.setPaintTicks(true);
		slider.setPaintLabels(true);
		this.getContentPane().add(slide,BorderLayout.EAST);
		ControlJSlider controlRight = new ControlJSlider(modele,slider);
		
		modele.addObserver(controlRight);
		slider.addChangeListener(controlRight);
		
	}

	private void creerTop() {
		JPanel top = new JPanel();
		JButton precedent = new JButton("Précedent");
		JButton suivant = new JButton("Suivant");
		precedent.setEnabled(false);
		top.add(precedent);
		top.add(suivant);
		this.getContentPane().add(top,BorderLayout.NORTH);
		ControlJButtons controltop= new ControlJButtons(modele,precedent,suivant);
		precedent.addActionListener(controltop);
		suivant.addActionListener(controltop);
		modele.addObserver(controltop);
		
		
		
	}

	private void creerLeft() {
		JPanel left = new JPanel();
		JList liste ;
		DefaultListModel lm = new DefaultListModel();
		
		
		for(int i=0;i<modele.getSize();i++){
			lm.addElement(modele.getPhoto(i).getNom());			
		}
		liste = new JList(lm);
		left.add(liste);
		this.getContentPane().add(left,BorderLayout.WEST);
		ControlList controleliste = new ControlList(modele,liste);
		liste.addListSelectionListener(controleliste);
		modele.addObserver(controleliste);
	}

	private void creerBot() {
		JPanel bot = new JPanel();
	
		ArrayList<JButton> lesBoutons = new ArrayList<JButton>();
		JButton b1;
		for(int i = 0;i<modele.getSize();i++){
			b1=new JButton(modele.getPhoto(i).getIcone());
			b1.setBorder(new LineBorder(Color.BLUE,12));
			bot.add(b1);
			lesBoutons.add(b1);
			
		}
		ControlJButtons2 cjb = new ControlJButtons2(modele,lesBoutons,bot);
		for(int i =0;i<lesBoutons.size();i++){
			lesBoutons.get(i).addActionListener(cjb);
			if(i==modele.getIndexCourant()){
				lesBoutons.get(i).setBorderPainted(true);
			}else{
				lesBoutons.get(i).setBorderPainted(false);	
			}
			
		}
		modele.addObserver(cjb);
		this.getContentPane().add(bot,BorderLayout.SOUTH);
	}

	private void creerCentre() {
		
		JLabel photoCentre;
		JPanel jPanelImage = new JPanel(new FlowLayout(FlowLayout.LEFT,10,10));
		jPanelImage.setPreferredSize(new Dimension(600,500));
		jPanelImage.setBorder(BorderFactory.createBevelBorder(1));
		
		photoCentre = new JLabel(this.modele.getPhotoCourante());
		
		ControlJLabel controleCenter = new ControlJLabel(photoCentre);
		this.modele.addObserver(controleCenter);
		JScrollPane jsp = new JScrollPane(photoCentre);
		jPanelImage.add(jsp);
		this.getContentPane().add(jPanelImage,BorderLayout.CENTER);
		
		
		
	}
	private void creerMenu(){
		JMenu menu = new JMenu("Fichier");
		JMenuBar menuBar = new JMenuBar();
		JMenuItem addImage = new JMenuItem("Ajouter une image");
		JMenuItem quitter = new JMenuItem("Quitter");
		menu.add(addImage);
		menu.add(quitter);
		menuBar.add(menu);
		ControlJMenu cjm = new ControlJMenu(modele);
		addImage.addActionListener(cjm);
		quitter.addActionListener(cjm);
		modele.addObserver(cjm);
		this.setJMenuBar(menuBar);
	}

}
