package fr.iutfbleau.projetAgile.Puissance4.View;

import java.awt.*;
import javax.swing.*;
import fr.iutfbleau.projetAgile.Puissance4.Utils.Constants;

/**
 * Classe qui représente un pion
 */
public class Pion extends JComponent{

    private static Color HIGHLIGHT_COLOR = null;
    private int player;
    private boolean hover = false;

    /**
     * Dimension minimum d'un pion
     * @return la {@code Dimension} minimale d'un pion
     */
    public static Dimension getPionMinimumSize() {
        return new Dimension(80,80);
    }

    /**
     * Dimension maximale d'un pion
     * @return la {@code Dimension} maximale d'un pion
     */
    public static Dimension getPionMaximumSize() {
        return new Dimension(150,150);
    }

    /**
     * Dimension préférée d'un pion
     * @return la {@code Dimension} préférée d'un pion
     */
    public static Dimension getPionPreferredSize() {
        return new Dimension(120,120);
    }

    /**
     * Crée un pion
     * @param player a qui appartient le pion
     */
    public Pion(int player) {
        this.setMinimumSize(new Dimension(80,80));
        this.setMaximumSize(new Dimension(150,150));
        this.setPreferredSize(new Dimension(120,120));
        this.player = player;
    }
    /**
     * Change le "propriétaire" du pion 
     * @param player le joueur
     */
    public void setPlayer(int player) {
        this.player = player;
    }
    /**
     * Indique le pion est survolé
     * @param b un booléen
     */
    public void setHover(boolean b) {
        this.hover = b;
    }
    /**
     * Retourne le "priopriétaire" du pion
     * @return le joueur propriétaire du pion
     */
    public int getPlayer() {
        return this.player;
    }
    /**
     * Set la couleur de survol d'un pion
     * @param c la couleur du survol
     */
    public static void setHighlightColor(Color c) {
        Pion.HIGHLIGHT_COLOR = c;
    }

    @Override
    protected void paintComponent(Graphics g) {
        Graphics2D g2 = (Graphics2D) g.create();
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        Color c;
        switch(this.player) {
            case Constants.PLAYER_ONE : 
                c = Constants.PLAYER_ONE_COLOR;
                break;
            case Constants.PLAYER_TWO : 
                c = Constants.PLAYER_TWO_COLOR;
                break;
            case Constants.PLAYER_THREE :
                c = Constants.PLAYER_THREE_COLOR;
                break;
            default :
                c = Constants.EMPTY_COLOR;
                break;
        }
        if(this.hover) {
            g2.setColor(Pion.HIGHLIGHT_COLOR);
            g2.fillOval(Constants.PIECE_MARGIN, Constants.PIECE_MARGIN, this.getWidth() - 2 * Constants.PIECE_MARGIN, this.getHeight() - 2 * Constants.PIECE_MARGIN);
        }
        else {
            g2.setColor(c);
            g2.fillOval(Constants.PIECE_MARGIN, Constants.PIECE_MARGIN, this.getWidth() - 2 * Constants.PIECE_MARGIN, this.getHeight() - 2 * Constants.PIECE_MARGIN);
        }
        
    }
}