package com.proj.track;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class Screen extends JFrame{
	User user;
	Track track;
	Monitor monitor;
	Container container;
	JPanel track_panel1, track_panel2, track_panel3, track_panel4, 
	track_panel5, text_panel, btt_panel, bind_panel1, bind_panel2;
	JTextArea jTextArea;
	JScrollPane jScrollPane;
	JButton start_btt, restart_btt, test_btt;
	JComboBox<String> jComboBox;
	
	Thread thread1, thread2, thread3, thread4, thread5;
	
	String[] strs = {"1", "2", "3", "4", "5"};
	int x = 10;
	public Screen(User user) {
		this.user = user;
		
		track = new Track();
		monitor = new Monitor(track);
		
		container = getContentPane();
		
		track_panel1 = new TrackPanel1(track);
		track_panel2 = new TrackPanel2(track);
		track_panel3 = new TrackPanel3(track);
		track_panel4 = new TrackPanel4(track);
		track_panel5 = new TrackPanel5(track);
		text_panel = new JPanel();
		btt_panel = new JPanel();
		bind_panel1 = new JPanel();
		bind_panel2 = new JPanel();
		
		jTextArea = new JTextArea(80, 80);
		jScrollPane = new JScrollPane(jTextArea);
		
		start_btt = new JButton("½ÃÀÛÇÏ±â");
		restart_btt = new JButton("´Ù½Ã½ÃÀÛ");
		
		jComboBox = new JComboBox<>(strs);
		
		setSize(1800, 900);
		setLocation(300, 300);
		
		init();
		start();
		
		setVisible(true);
	}

	private void init() {
		bind_panel1.setLayout(new GridLayout(5, 1));
		bind_panel1.add(track_panel1);
		bind_panel1.add(track_panel2);
		bind_panel1.add(track_panel3);
		bind_panel1.add(track_panel4);
		bind_panel1.add(track_panel5);
		
		text_panel.setLayout(new FlowLayout());
		text_panel.add(jScrollPane);
		btt_panel.setLayout(new FlowLayout(FlowLayout.RIGHT));
		btt_panel.add(jComboBox);
		btt_panel.add(start_btt);
		btt_panel.add(restart_btt);
		
		bind_panel2.setLayout(new BorderLayout());
		bind_panel2.add("Center", text_panel);
		bind_panel2.add("South", btt_panel);
		
		container.setLayout(new GridLayout(2, 1));
		container.add(bind_panel1);
		container.add(bind_panel2);
	}

	private void start() {
		// TODO Auto-generated method stub
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		
		start_btt.addActionListener(e-> {
			monitor.start();
			thread1 = new Thread((TrackPanel1)track_panel1);
			thread1.start();
			
			thread2 = new Thread((TrackPanel2)track_panel2);
			thread2.start();
			
			thread3 = new Thread((TrackPanel3)track_panel3);
			thread3.start();
			
			thread4 = new Thread((TrackPanel4)track_panel4);
			thread4.start();
			
			thread5 = new Thread((TrackPanel5)track_panel5);
			thread5.start();
			
			check();
		});
		
		restart_btt.addActionListener(e-> {
			jTextArea.setText("");
			
			track.getList().stream().forEach(h-> {
				h.setCurPos(0);
				h.setStop(false);
			});
			
			monitor.getList().clear();
			
			TrackPanel1 trackPanel1 = (TrackPanel1)track_panel1;
			trackPanel1.init();
			
			TrackPanel2 trackPanel2 = (TrackPanel2)track_panel2;
			trackPanel2.init();
			
			TrackPanel3 trackPanel3 = (TrackPanel3)track_panel3;
			trackPanel3.init();
			
			TrackPanel4 trackPanel4 = (TrackPanel4)track_panel4;
			trackPanel4.init();
			
			TrackPanel5 trackPanel5 = (TrackPanel5)track_panel5;
			trackPanel5.init();
			
			start_btt.doClick();
		});
	}
	
	public void check() {
		Runnable runnable = () -> {
			boolean stop = false;
			while(!stop) {
				if(monitor.getList().size() == 5) {
//					for(Record record : monitor.getList()) {
//						jTextArea.append(record.toString());
//						stop = true;
//					}
					
					for(int i = 0; i < monitor.getList().size(); i++) {
						jTextArea.append((i+1) + "µî : " + monitor.getList().get(i).toString());
    	 				stop = true;
					}
				}
			}
		};
		Thread thread = new Thread(runnable);
		thread.start();
	}
}
