package main;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class MainFrame extends JFrame implements ActionListener {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private JPanel contentPane;

	static JButton[] buttons = new JButton[9];
	static String spieler = "X";
	
	
	static JButton restartButton;
	static JButton gewinnerButton;
	static JButton exitButton;
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		MainFrame frame = new MainFrame();
		frame.setVisible(true);
		
		gewinnerButton.requestFocusInWindow();
	}
	
	/**
	 * Create the frame.
	 */
	public MainFrame() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 320, 350);
		contentPane = new JPanel();
		setResizable(false);
		this.setTitle("TicTacToe");
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(new GridLayout(4, 3, 2, 2));
		
		restartButton = new JButton("Restart");
		restartButton.addActionListener(this);
		restartButton.setForeground(Color.GREEN);
		contentPane.add(restartButton);
		
		gewinnerButton = new JButton(spieler + " ist dran!");
		contentPane.add(gewinnerButton);
		
		exitButton = new JButton("Exit");
		exitButton.addActionListener(this);
		exitButton.setForeground(Color.RED);
		contentPane.add(exitButton);
		
		for(int i=0; i < 9;i++){
			JButton buttonPane = new JButton();
			buttons[i] = buttonPane;
			buttonPane.setText("");
			buttonPane.addActionListener(new ActionListener() {
				@Override 
				public void actionPerformed( ActionEvent e ) {
					if (spieler == "X") {
						buttonPane.setText("X");
						spieler = "O";
					}else if (spieler == "O") {
						buttonPane.setText("O");
						spieler = "X";
					}
					gewinnerButton.setText(spieler + " ist dran!");
					gewinnerPruefen();
					buttonPane.setEnabled(false);
					gewinnerButton.requestFocusInWindow();
				}
			});
			contentPane.add(buttonPane);
		}
		
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == MainFrame.restartButton) {
			restart();
		}else if (e.getSource() == MainFrame.exitButton) {
			System.exit(0);
		}  
	}

	static void restart() {
		for (int i=0; i < buttons.length; i++) {
			buttons[i].setEnabled(true);
			buttons[i].setText("");
		}
		spieler = "X";
		gewinnerButton.setText(spieler + " ist dran!");
	}

	
	static void gewinnerPruefen(){
		if (buttons[0].getText().equals(buttons[1].getText()) && buttons[0].getText().equals(buttons[2].getText()) && !(buttons[0].getText().isEmpty())) {
			gewinnerButton.setText("Gewinner: " + buttons[0].getText());
			beenden();
		}else if (buttons[3].getText().equals(buttons[4].getText()) && buttons[3].getText().equals(buttons[5].getText()) && !(buttons[3].getText().isEmpty())) {
			gewinnerButton.setText("Gewinner: " + buttons[3].getText());
			beenden();
		}else if (buttons[6].getText().equals(buttons[7].getText()) && buttons[6].getText().equals(buttons[8].getText()) && !(buttons[6].getText().isEmpty())) {
			gewinnerButton.setText("Gewinner: " + buttons[6].getText());
			beenden();
		}else if (buttons[0].getText().equals(buttons[3].getText()) && buttons[0].getText().equals(buttons[6].getText()) && !(buttons[0].getText().isEmpty())) {
			gewinnerButton.setText("Gewinner: " + buttons[0].getText());
			beenden();
		}else if (buttons[1].getText().equals(buttons[4].getText()) && buttons[1].getText().equals(buttons[7].getText()) && !(buttons[1].getText().isEmpty())) {
			gewinnerButton.setText("Gewinner: " + buttons[1].getText());
			beenden();
		}else if (buttons[2].getText().equals(buttons[5].getText()) && buttons[2].getText().equals(buttons[8].getText()) && !(buttons[2].getText().isEmpty())) {
			gewinnerButton.setText("Gewinner: " + buttons[2].getText());
			beenden();
		}else if (buttons[0].getText().equals(buttons[4].getText()) && buttons[0].getText().equals(buttons[8].getText()) && !(buttons[0].getText().isEmpty())) {
			gewinnerButton.setText("Gewinner: " + buttons[0].getText());
			beenden();
		}else if (buttons[2].getText().equals(buttons[4].getText()) && buttons[2].getText().equals(buttons[6].getText()) && !(buttons[2].getText().isEmpty())) {
			gewinnerButton.setText("Gewinner: " + buttons[2].getText());
			beenden();
		}else if (buttons[0].getText().isEmpty() && buttons[1].getText().isEmpty() && buttons[2].getText().isEmpty() && buttons[3].getText().isEmpty() && buttons[4].getText().isEmpty() && buttons[5].getText().isEmpty() && buttons[5].getText().isEmpty() && buttons[6].getText().isEmpty() && buttons[7].getText().isEmpty() && buttons[8].getText().isEmpty()) {
			gewinnerButton.setText("Niemand");
			beenden();
		}
	}
	
	static void beenden() {
		for (int i=0; i < buttons.length; i++) {
			buttons[i].setEnabled(false);
		}
	}
	
}
