package game;

import java.util.ArrayList;
import account.Account;

public class Team implements IGameElement {
	//private boolean laser;
	//視野//
	
	//Accountを3人持っている
	private ArrayList<Account> playersAccount  = new ArrayList<Account>();
	
	//Bombを0〜6持ってる
	//private ArrayList<Bomb> bombList = new ArrayList<Bomb>();
	
	//LaserTurretを0〜1持っている
	private LaserTurret laserTurret = null;
	
	//Mirrorを0〜3持っている
	private ArrayList<Mirror> mirrorList = new ArrayList<Mirror>();
	
	//laserのクールタイム　falseでクールタイムがない状態
	private int coolTime = 0;
	private boolean coolTimeFlag = false;
	
	//チームにアカウントを追加
	public void addMember(Account ac) {
		playersAccount.add(ac);
	}
	
	//チームのアカウントを削除
	public void removeMember(Account ac) {
		playersAccount.remove(ac);
	}
	
	// チームのn番目のアカウント情報を取得
	public Account getMember(int n) {
		return playersAccount.get(n);
	}
	
	//チームのアカウントをカウント
	public int getTeamMemberCount(){
		return playersAccount.size();
	}
	
	//LaserTurretを取得
	public LaserTurret getLaserTurret() {
		return laserTurret;
	}
	
	//LaserTurretを新規作成
	public void createLaserTurret(double x, double y, double z, double a, String state, String sId) {
		laserTurret = new LaserTurret(x,y,z,a,state,sId);
	}
	//LaserTurertを更新
	public void updateLaserTurret(double angle, String state) {
		this.laserTurret.setAngle(angle);
		this.laserTurret.setState(state);
	}
	//LaserTurretを削除
	public void removeLaserTurret(int countTime) {
		this.laserTurret = null;
		coolTime = countTime;
		coolTimeFlag = true;
	}
	
	//Mirrorを新規作成
	public void createMirror(double mPointX, double mPointY, double mPointZ, double mAngle, String mState, String sId) {
		mirrorList.add(new Mirror(mPointX,mPointY,mPointZ,mAngle,mState,sId));
	}
	//Mirrorを更新
	public void updateMirror(double angle, String state, Mirror myMirror) {
		myMirror.setAngle(angle);
		myMirror.setState(state);
	}
	//Mirrorを削除
	public void removeMirror(Mirror mirror) {
		mirrorList.remove(mirror);
	}
	//Mirrorの数
	public int countMirror() {
		return mirrorList.size();
	}
	//i番目のMirrorを取得
	public Mirror getMirror(int i) {
		return mirrorList.get(i);
	}
	
	//自分自身の設置したMirrorをsIdで探す
	public Mirror getMyMirror(String sId) {
		
		Mirror mirror;
		
		for (int i=0; i<mirrorList.size(); i++) {
			mirror = mirrorList.get(i);
			
			//一致するsIdを探し、一致した場合、accountを返す
			if (mirror.getsId().equals(sId)) {
				return mirror;
			} 
		}
		return null;
	}
	
	//レーザのcoolTime
	public int getCoolTime() {
		return coolTime;
	}
	public void setCoolTimeFlag(boolean flag) {
		coolTimeFlag = flag;
	}
	public boolean getCoolTimeFlag() {
		return coolTimeFlag;
	}
	
	//visitorによる処理を受け入れる
	public boolean accept(IGameElementVisitor v) {
		if (!v.visit(this)) return false;
		for (Account account: playersAccount) {
			if (!account.accept(v)) return false;
		}
		return true;
	}
}
