package com.ntlab.irisserver.resources;
import com.ntlab.irisserver.entities.*;
import org.springframework.stereotype.Component;
import com.ntlab.irisserver.models.RoomManager;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.util.List;
import java.util.Iterator;
@Component
@Path("/rooms")
public class TurnsRest {
//------------------------------------------------------------------------
// rooms/{rid}/game/turns:
@GET //現在のターンの取得
@Path("/{rid}/game/turns")
@Produces(MediaType.APPLICATION_JSON)
public Integer getTurnNumber(@PathParam("rid") String rid) {
RoomManager rm = RoomManager.getInstance();
Room room = rm.getRoom(rid);
Game game = room.getGame();
Integer tn = game.getNowTurn();
return tn;
}
@POST //新しいターンの作成
@Path("/{rid}/game/turns")
@Produces(MediaType.APPLICATION_JSON)
public void addTurns(@PathParam("rid") String rid) {
RoomManager rm = RoomManager.getInstance();
Room room = rm.getRoom(rid);
Game game = room.getGame();
game.createTurn();
}
//------------------------------------------------------------------------
// rooms/{rid}/game/turns/{tno}:
@GET //Turnインスタンスの取得
@Path("/{rid}/game/turns/{tno}")
@Produces(MediaType.APPLICATION_JSON)
public TurnJson getTurns(@PathParam("rid") String rid, @PathParam("tno") int tno) {
RoomManager rm = RoomManager.getInstance();
Room room = rm.getRoom(rid);
Game game = room.getGame();
Turn t = game.getTurn(tno);
TurnJson tj = new TurnJson(t);
if (t == null) {
//部屋がなければエラー
var response = Response.status(Response.Status.NO_CONTENT);
response.status(404).entity("部屋が存在しません");
throw new WebApplicationException(response.build());
}
return tj;
}
//------------------------------------------------------------------------
// rooms/{rid}/game/turns/{tno}/hint:
@GET //ヒントを取得
@Path("/{rid}/game/turns/{tno}/hint")
@Produces(MediaType.TEXT_PLAIN)
public String getHint(@PathParam("rid") String rid, @PathParam("tno") int tno){
RoomManager rm = RoomManager.getInstance();
Room room = rm.getRoom(rid);
Game game = room.getGame();
Turn t = game.getTurn(tno);
return t.getHint();
}
@PUT //ヒントと最大数を入力することで諜報員のターンに遷移する
@Path("/{rid}/game/turns/{tno}/hint")
public void putHint(@PathParam("rid") String rid, @PathParam("tno") int tno, @FormParam("hint") String hint, @FormParam("max") Integer max){
RoomManager rm = RoomManager.getInstance();
Room room = rm.getRoom(rid);
Game game = room.getGame();
Turn t = game.getTurn(tno);
t.setHint(hint);
t.setMax(max);
t.setTurnstate(1);
}
//------------------------------------------------------------------------
// rooms/{rid}/game/turns/{tno}/max:
@GET //Maxを取得
@Path("/{rid}/game/turns/{tno}/max")
public Integer getMax(@PathParam("rid") String rid, @PathParam("tno") int tno){
RoomManager rm = RoomManager.getInstance();
Room room = rm.getRoom(rid);
Game game = room.getGame();
Turn t = game.getTurn(tno);
return t.getMax();
}
/*
@PUT //putHintに吸収合併
@Path("/{rid}/game/turns/{tno}/max")
public void putMax(@PathParam("rid") String rid, @PathParam("tno") int tno, @FormParam("max") int max){
RoomManager rm = RoomManager.getInstance();
Room room = rm.getRoom(rid);
Game game = room.getGame();
Turn t = game.getTurn(tno);
t.setMax(max);
}
*/
//------------------------------------------------------------------------
// rooms/{rid}/game/turns/{tno}/questions:
@GET //カードごとの疑っている人のリストを取得...は動いてんのかな?
@Path("/{rid}/game/turns/{tno}//questions")
@Produces(MediaType.APPLICATION_JSON)
public Boolean[] getQ(@PathParam("rid") String rid, @PathParam("tno") int tno){
RoomManager rm = RoomManager.getInstance();
Room room = rm.getRoom(rid);
Game game = room.getGame();
Turn t = game.getTurn(tno);
return t.getQuestionsList();
}
@POST //怪しいの切り替え
@Path("/{rid}/game/turns/{tno}/questions")
public void changeQ(@PathParam("rid") String rid, @PathParam("tno") int tno, @FormParam("cno") int cno){
RoomManager rm = RoomManager.getInstance();
Room room = rm.getRoom(rid);
Game game = room.getGame();
Turn t = game.getTurn(tno);
t.setQuestions(cno);
}
//------------------------------------------------------------------------
// rooms/{rid}/game/turns/{tno}/openlist:
@GET
@Path("/{rid}/game/turns/{tno}/openlist")
@Produces(MediaType.APPLICATION_JSON)
public List<Integer> getOpenList(@PathParam("rid") String rid, @PathParam("tno") int tno){
RoomManager rm = RoomManager.getInstance();
Room room = rm.getRoom(rid);
Game game = room.getGame();
Turn t = game.getTurn(tno);
return t.getOpenListAll();
}
@PUT //オープンリストの追加 カードをめくったときの色ごとの処理()
@Path("/{rid}/game/turns/{tno}/openlist")
public void setOpenList(@PathParam("rid") String rid, @PathParam("tno") Integer tno, @FormParam("cno")Integer cno) {
RoomManager rm = RoomManager.getInstance();
Room room = rm.getRoom(rid);
Game game = room.getGame();
Turn t = game.getTurn(tno);
Cell card = game.getCell(cno);
t.addOpenList(cno);
card.setIsOpen(true);
//turnが続くかの判定
/*
int i;
int r = 0;
int b = 0;
for(i = 0; i < 16; i++){
Cell cell = game.getCell(i);
boolean isOpen = cell.getIsOpen();
if(isOpen == true){
if(cell.getColor() == "r")r++;
if(cell.getColor() == "b")b++;
}
}
if(card.color == "d"){
t.setEndstate(1);
}else if(r >= 6||(b >= 5)){
t.setEndstate(1);
}else if(t.getMax() <= t.getOpenListAll().size()){
game.createTurn();
}else if(card.color == "g"||(card.color != t.getTeam())){
game.createTurn();
}
*/
}
//------------------------------------------------------------------------
// rooms/{rid}/game/turns/{tno}/turnstate:
@GET
@Path("/{rid}/game/turns/{tno}/turnstate")
@Produces(MediaType.APPLICATION_JSON)
public Integer getTurnstate(@PathParam("rid") String rid, @PathParam("tno") int tno){
RoomManager rm = RoomManager.getInstance();
Room room = rm.getRoom(rid);
Game game = room.getGame();
Turn t = game.getTurn(tno);
return t.getTurnstate();
}
@PUT //Turnstateを1に変更
@Path("/{rid}/game/turns/{tno}/turnstate")
public void setTurnstate(@PathParam("rid") String rid, @PathParam("tno") int tno){
RoomManager rm = RoomManager.getInstance();
Room room = rm.getRoom(rid);
Game game = room.getGame();
Turn t = game.getTurn(tno);
t.setTurnstate(1);
}
//------------------------------------------------------------------------
// rooms/{rid}/game/turns/{tno}/endstate:
@GET
@Path("/{rid}/game/turns/{tno}/endstate")
@Produces(MediaType.APPLICATION_JSON)
public Integer getEndstate(@PathParam("rid") String rid, @PathParam("tno") int tno){
RoomManager rm = RoomManager.getInstance();
Room room = rm.getRoom(rid);
Game game = room.getGame();
Turn t = game.getTurn(tno);
return t.getEndstate();
}
@PUT //Endstateを1に変更
@Path("/{rid}/game/turns/{tno}/endstate")
public void setEndstate(@PathParam("rid") String rid, @PathParam("tno") int tno){
RoomManager rm = RoomManager.getInstance();
Room room = rm.getRoom(rid);
Game game = room.getGame();
Turn t = game.getTurn(tno);
t.setEndstate(1);
}
}