import java.awt.*;

public class Piece
{
  private Spot[] spots;
  private Spot center;
  private Spot[][] grid;
  private Square[] squares;
  private Color col;
  public Piece(Spot one, Spot two, Spot three, Spot four, Spot raxis, Spot[][] thing, Color color)
  {
    spots = new Spot[4];
    spots[0] = one;
    spots[1] = two;
    spots[2] = three;
    spots[3] = four;
    center = raxis;
    grid = thing;
    squares = new Square[4];
    col = color;
    for(int i = 0; i<4; i++)
    {
      squares[i] = new Square(col);
      spots[i].setSquare(squares[i]);
    }
  }
  public void rotate()
  {
  /*
    if(this instanceof OPiece) return;
    if(this instanceof IPiece)
    {
      for(int i = 0; i<3; i++)
      {
        spots[i].setSquare(null);
        spots[i] = grid[center.getY()-spots[i].getY()+center.getX()][spots[i].getX()-center.getX()+center.getY()];
      }
      spots[3].setSquare(null);
      if(spots[3].getY()-center.getY() == 0) spots[3] = grid[center.getX()][center.getY()+2];
      else spots[3] = grid[center.getX()+2][center.getY()];
    }
    */
    for(int i = 0; i<4; i++)
      spots[i].setSquare(null);
    boolean rotatable = true;
    for(int i = 0; i<4; i++)
    {
      if(center.getY()-spots[i].getY()+center.getX() < 0 ||
         center.getY()-spots[i].getY()+center.getX() > Tetris.FIELD_WIDTH-1 ||
         spots[i].getX()-center.getX()+center.getY() < 0 ||
         spots[i].getX()-center.getX()+center.getY() > Tetris.FIELD_HEIGHT-1 ||
         (grid[center.getY()-spots[i].getY()+center.getX()][spots[i].getX()-center.getX()+center.getY()].getSquare() != null)) rotatable = false;
    }
    if(rotatable)
    {
      for(int i = 0; i<4; i++)
      {
        spots[i] = grid[center.getY()-spots[i].getY()+center.getX()][spots[i].getX()-center.getX()+center.getY()];
      }
    }
    for(int i = 0; i<4; i++)
      spots[i].setSquare(squares[i]);
  }
  public void left()
  {
    for(int i = 0; i<4; i++)
    {
      spots[i].setSquare(null);
      spots[i] = grid[spots[i].getX()-1][spots[i].getY()];
    }
    for(int i = 0; i<4; i++)
      spots[i].setSquare(squares[i]);
    center = grid[center.getX()-1][center.getY()];
  }
  public void right()
  {
    for(int i = 0; i<4; i++)
    {
      spots[i].setSquare(null);
      spots[i] = grid[spots[i].getX()+1][spots[i].getY()];
    }
    for(int i = 0; i<4; i++)
      spots[i].setSquare(squares[i]);
    center = grid[center.getX()+1][center.getY()];
  }
  public void downOne()
  {
    for(int i = 0; i<4; i++)
    {
      spots[i].setSquare(null);
      spots[i] = grid[spots[i].getX()][spots[i].getY()+1];
    }
    for(int i = 0; i<4; i++)
      spots[i].setSquare(squares[i]);
    center = grid[center.getX()][center.getY()+1];
  }
  public Spot[] getSpots() { return spots; }
  public Spot[][] getGrid() { return grid; }
  public Spot getCenter() { return center; }
  public Square[] getSquares() { return squares; }
}

