package com.ntlab.irisserver.entities;
import com.fasterxml.jackson.annotation.JsonProperty;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import java.util.*;
public class Room {
@JsonProperty("rid")
public String rid;
//String rid = null;
@JsonProperty("state")
public int state;
//int state;
@JsonProperty("ownerName")
public String ownerName;
//String ownerName = null;
@JsonProperty("members")
Map<String,Member> members= new HashMap<>();
@JsonProperty("settings")
Settings settings = new Settings();
@JsonProperty("game")
Game game =null;
private Member redMaster;
private Member blueMaster;
public Room(String rid, String owner) {
this.rid=rid;
ownerName=owner;
}
public String getOwnerName() {
return ownerName;
}
public Settings getSettings() {
return settings;
}
public List<Member> getMembers() {
List<Member> memberslist = new ArrayList<Member>(members.values()) ;
return memberslist;
}
public void setRedMaster(Member redMaster) {
this.redMaster = redMaster;
}
public void setBlueMaster(Member blueMaster) {
this.blueMaster = blueMaster;
}
//プレイヤーの情報を変更する
public void changeTeamAndMaster(String nick, String belongs, boolean isMaster) {
//変更対象の情報を取得
Member m = members.get(nick);
//変更先のチームに既に所属している場合はチームに変更なし
if(!(m.getBelongs().equals(belongs))) {
//1チームの最大人数は8人
//変更先のチームの人数を数える
int memberscount = 0;
List<Member> membersList = new ArrayList<Member>(members.values()) ;
for(Member mem :membersList) {
if(mem.getBelongs().equals(belongs)) {
memberscount++;
}
}
//変更先のチームが満員であれば変更不可
if(memberscount >= 8) {
return;
}else{
m.setBelongs(belongs);
}
}
//変更対象がマスターであればマスター不在に修正
if(m.isMaster()){
m.setMaster(false);
if(redMaster == m){
redMaster = null;
}
if(blueMaster == m){
blueMaster = null;
}
}
//マスターに変更する処理
if(isMaster){
//マスターを変更
if(belongs.equals("r")) {
//赤チームのマスターをメンバーに変更
if(redMaster != null) {
redMaster.setMaster(false);
}
//変更対象を赤チームのマスターに変更
m.setMaster(true);
redMaster = m;
}
if(belongs.equals("b")) {
//青チームのマスターをメンバーに変更
if(blueMaster != null) {
blueMaster.setMaster(false);
}
//変更対象を赤チームのマスターに変更
m.setMaster(true);
blueMaster = m;
}
}
}
public Game createGame(String owner) {
game=new Game();
return game;
}
public Game getGame() {
return game;
}
public Member getMember(String nick) {
Member m = members.get(nick);
return m;
}
public void addMember(String nick) {
Member m=new Member(nick);
m.setNickname(nick);
members.put(nick,m);
}
public void deleteMember(String nick) {
members.remove(nick);
}
public int getState() {
return state;
}
}