package Übungen.TicTac;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Scanner;

import javax.swing.*;

public class Controller {
    static Scanner scan = new Scanner(System.in);
    static String[][] spielField = new String[3][3];
    
    private Modell spieler1;
    private Modell spieler2;
    private View view;    
    private String spieler = "X"; 
    
    public Controller() {}
    
	public Controller(Modell spieler1, Modell spieler2, View view) {
		this.spieler1 = spieler1;
		this.spieler2 = spieler2;
		this.view = view;
		initSpielfeld();
		zeigeDaten();
	}
	
	public void zeigeDaten() {
		view.nameSpieler1.setText(spieler1.getName());
		view.anzahlgewinn1.setText(spieler1.getAnzahlGewinn() + "");
		view.nameSpieler2.setText(spieler2.getName());
		view.anzahlgewinn2.setText(spieler2.getAnzahlGewinn() + "");
		view.XoderO.setText(spieler);
	}

	public static boolean checkSet(String X_O, int x, int y) {
		
		if (x < 0 || x > 2 || y < 0 || y > 2)
			return false;

		if (!(spielField[x][y].equals("-")))
			return false;

		return true;
	}
	
	
	public static boolean checkGewinner(Modell player) {
		for (int i = 0; i < 3; i++) {
			if (spielField[i][0].equals(player.getZeichen()) && spielField[i][1].equals(player.getZeichen()) && spielField[i][2].equals(player.getZeichen()))
				return true;
		}
		for (int i = 0; i < 3; i++) {
			if (spielField[0][i].equals(player.getZeichen()) && spielField[1][i].equals(player.getZeichen()) && spielField[2][i].equals(player.getZeichen()))
				return true;
		}
		if (spielField[0][0].equals(player.getZeichen()) && spielField[1][1].equals(player.getZeichen()) && spielField[2][2].equals(player.getZeichen()))
			return true;

		if (spielField[0][2].equals(player.getZeichen()) && spielField[1][1].equals(player.getZeichen()) && spielField[2][0].equals(player.getZeichen()))
			return true;

		return false;
	}
	
	public static void ausgabeSpielFeld(String X_O, int x, int y) {
		spielField[x][y] = X_O;
		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 3; j++) {
				System.out.print(spielField[i][j] + "|");
			}
			System.out.println();
		}
	}
	

    public void initSpielfeld() {
        // Spielfeld initialisieren
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                spielField[i][j] = "-";
                view.x_o[i][j].setText("-");
                
                final int x = i;
                final int y = j;
                view.x_o[i][j].addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        handleMove(x, y);
                    }
                });
            }
        }
    }

    public void handleMove(int x, int y) {
    	
        if (spielField[x][y].equals("-")) {
            spielField[x][y] = spieler;
            view.x_o[x][y].setText(spieler);  
            
            if (checkGewinner(spieler1)) {
            	System.out.println("Spieler " + spieler1.getName() + " hat gewonnen!");
            	spieler1.setAnzahlGewinn(spieler1.getAnzahlGewinn() + 1);
            }
            
            else if (checkGewinner(spieler2)) {
            	System.out.println("Spieler " + spieler2.getName() + " hat gewonnen!");
            	spieler2.setAnzahlGewinn(spieler2.getAnzahlGewinn() + 1);
            }
                
            
           spieler = spieler.equals("X") ? "O" : "X";
           zeigeDaten();
        }
    }
}
