import java.util.*;
import java.awt.*;
import java.awt.Graphics;
import java.awt.Graphics2D;
/**
 *  Clase Piece
 *  <p>
 *  Piece es la clase padre de las diferentes piezas que constituyen el juego
 *  Las otras piezas reescriben su metodo Moves() y Attacks()
 */
public class Piece extends PlayableElement{
	private static int id = 0;
	private Vector2D pos;
	private Vector2D pos_b;
	private PieceView view;
   public boolean dead = false;  //Para saber si murio una pieza
   public int hp = 0;   //Vida
   public int hpmax = 0; //Vida maxima
   public int range = 0;   //rango de ataque
   public int atk = 0;  //Ataque
   public int moves = 0;   //Cantidad de casilla que se puede mover (No define la direccion)
   public int type = 0; // 0 melee, 1 rango
   public int team = 0;     //0 white, 1 black
   public int opteam = 0; //Si se encuentra en una mano diferente a la con que se origino
   public boolean blockmoves = false;
   public boolean blockattacks = false;
   public Board bp = null; //Casilla en la que se encuentra la ficha
   public boolean Sel = false;
/**
     *  Constructor de Piece
     *
     *  @param position posicion en la ventana
     *  @param positioninboard posicion en el tablero
     */

    public Piece(Vector2D position, Vector2D positioninboard){
		super(id++);
      pos = position;
      pos_b = positioninboard;
		view = new PieceView(this);
	}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////METODOS LISTOS//////////////////////////////////////////////////////////////////////////////
	/**
    *  Se obtiene la posicion respecto a la ventana de la pieza
    *  @return posicion 
    */
   public Vector2D getPosition(){
		return pos;
	}
   /**
    *  Cambia la posicion de la pieza
    *  @param p punto en donde se quiere mover la pieza 
    */
	public void setPosition(Vector2D p){
		pos = p;
	}
/**
    *  Se obtiene la fila del tablero en donde se encuentra la pieza
    *  @return posicion y en el tablero 
    */
	public int getRow(){ //Row es fila
		if (pos_b==null) return 0;
		return pos_b.getX();
	}
/**
    *  Se obtiene la columna del tablero en donde se encuentra la pieza
    *  @return posicion x en el tablero 
    */
	public int getCol(){ //Col es coluumna
		if (pos_b==null) return 0;
		return pos_b.getY();
	}
  /**
    *  Se obtiene los puntos de ataque de la pieza
    *  @return valor de ataque 
    */
  
  public int getDamage(){
   return atk;
  }
  /**
    *  Cambia la posicion y de la pieza respecto del tablero
    *  @param r posicion y del tablero donde se quiere mover la pieza 
    */
	public void setRow(int r){
		int pr = pos_b.getX();
      pr = r;
	}
/**
    *  Cambia la posicion x de la pieza respecto del tablero
    *  @param c posicion x del tablero donde se quiere mover la pieza 
    */
	public void setCol(int c){
		int pc = pos_b.getY();
      pc = c;
	}
   /**
    *  Cambia la posicion de la pieza respecto del tablero
    *  @param r posicion y del tablero donde se quiere mover la pieza 
    *  @param c posicion x del tablero donde se quiere mover la pieza
    */
   public void setColRow(int c, int r){
      Vector2D cr = new Vector2D(c,r);
      pos_b = cr;
   }
/**
    * Pinta la pieza
    */
	public void paintView(Graphics2D g) {
        view.draw(g);
    }
/**
    * Actualiza los graficos de la pieza
    */
    public void updateView(){
        view.update(this);
    }
    
    
    /**
    * Metodo para que la pieza reciba daño de otra pieza
    * @param p Pieza que le hará daño a esta pieza
    */
    
    public void takeDamage(Piece p){   //Recive daño de la pieza p e indica si murio o no
    
    if (p != null){
    int d = p.getDamage();
    if(hp>1){
    hp = hp - d;}
    else {
    this.Destroy();
    }
    }
    }
    
    public boolean isDead(){  //Para saber si una pieza murio
      return dead;
    }
    /**
    * Saca a la pieza del tablero
    */
    public void Destroy(){ //Pra destruir una pieza, no se si el.clear() servira
      
         this.setPosition(new Vector2D(-1,-1));
         dead = true;
      
    }
    
    
  

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////MODIFICAR////////////////////////////////////////////////////////////////////////////////
/**
    * Lista de movimientos posibles
    */
public ArrayList<Board> Moves(){return null;}   //Lista de posibles movimientos
/**
    * Lista de ataques posibles 
    */
public ArrayList<Board> Attacks(){return null;} //Lista de posibles lugares donde puede atacar

}