import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSlider;

public class Interface extends JFrame{
	private static final long serialVersionUID = 1L;
	//private static final Font titleFont = new Font(new JLabel().getFont().getName(), Font.BOLD, 14);
	//private static final Font defaultFont = new Font(new JLabel().getFont().getName(), Font.PLAIN, new JLabel().getFont().getSize());
	
	protected MusicList musicList;
	protected AnimationPlayer animPlayer;
	protected TimeLineJPanel timeLinePanel;
	protected TimeLineJList timeLineList;
	protected LightCanvasJPanel lightCanvas;
	protected JSlider timeSlider;
	protected long tick = 0;

	public Interface(MusicList musicList, final Runnable executeOnClose) {
		super("VRGNYMusicLights");
		this.musicList = musicList;
		populateWindow();
		pack();
		setMinimumSize(new Dimension(600, 500));
		setSize(new Dimension(800, 600));
		setLocationRelativeTo(null); // center window
		getContentPane().requestFocus();
        
		addWindowListener(new WindowAdapter() {
        	@Override
        	public void windowClosing(WindowEvent e) {
        		if(animPlayer != null)
        			animPlayer.stopTickClock();
        		if(executeOnClose != null)
        			executeOnClose.run();
        		dispose();
        	}
		});
	}
	
	protected void computeTick() {
		timeSlider.setValue((int) tick);
		lightCanvas.paintLights(musicList.render(tick));
		timeLineList.repaint();
		timeLinePanel.updateTick();
	}
	
	private void populateWindow() {
		JPanel mainPanel = new JPanel(new BorderLayout());
		timeLinePanel = new TimeLineJPanel(this);
		mainPanel.add(timeLinePanel, BorderLayout.CENTER);
		lightCanvas =  new LightCanvasJPanel();
		mainPanel.add(new PlayJPanel(this, lightCanvas), BorderLayout.SOUTH);
		mainPanel.add(new CommandJPanel(this), BorderLayout.EAST);
		add(mainPanel);
	}
}
