package com.haru.tetoru.template;

import static com.haru.tetoru.parts.Mino.R_LEFT;
import static com.haru.tetoru.parts.Mino.R_RIGHT;

import com.haru.tetoru.parts.Mino;
import com.haru.tetoru.parts.Table;


public abstract class Player {

	/* 操作の種類 */
	public static final int OP_NO = 0;
	public static final int OP_DOWN = 1;
	public static final int OP_RIGHT = 2;
	public static final int OP_LEFT = 3;
	public static final int OP_ROTATE_RIGHT = 4;
	public static final int OP_ROTATE_LEFT = 5;
	public static final int OP_START = 9;


	/**
	 * 操作の種類を読み取る
	 * @return
	 */
	public abstract int readOperate();

	/**
	 * 操作を実施
	 * Playerの持ち物ではないかも
	 * @param mytable
	 * @param current
	 * @param type
	 * @return
	 */
	public boolean doOperate(Table mytable, Mino current, int type) {

		boolean ret = false;

		/* ブロックの操作 */
		switch(type) {
		/* 下移動 */
		case OP_DOWN:
			ret = mytable.moveDown(current);
			break;
		/* 右移動 */
		case OP_RIGHT:
			ret = mytable.moveRight(current);
			break;
		/* 左移動 */
		case OP_LEFT:
			ret = mytable.moveLeft(current);
			break;
		/* 右回転 */
		case OP_ROTATE_RIGHT:
			ret = mytable.rotate(current, R_RIGHT);
			break;
		/* 左回転 */
		case OP_ROTATE_LEFT:
			ret = mytable.rotate(current, R_LEFT);
			break;
		/* 何もしない */
		case OP_NO:
			ret = true; /* 復帰値は気にしていない */
			break;
		case OP_START:
			ret = true; /* 復帰値は気にしていない */
			break;
		/* 入力失敗 */
		default:
			ret = false; /* 復帰値は気にしていない */
			break;
		}

		return ret;
	}

	/**
	 * ゲーム開始合図待ち
	 * @return
	 */
	public abstract boolean waitStartSign();

}