package servlet;

import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import account.Account;
import account.AccountManager;
import room.Room;
import room.RoomManager;

public class RoomListServlet extends HttpServlet{
	
	// 受け取る部分							↓reqで受け取る　　　　　　　　　　　↓respで返す
	public void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, java.io.IOException {
		
		//RoomManagerを使うため、宣言しておく
		RoomManager roommgr = RoomManager.getInstance();
		
		// AccountManagerを使うため、宣言しておく                      　↓シングルトンパターンを利用しているため
		AccountManager accountmgr = AccountManager.getInstance();
		
		// 返す文字の宣言				↓返すためresp
		PrintWriter printwriter = resp.getWriter();
		
		/*******************************
		 *	パラメータを受け取る req
		 *******************************/
		String state = req.getParameter("state");
		String sId = req.getSession().getId();

//System.out.println(" ******************** RoomListServlet ******************** ");

		/*******************************
		 *	init||update 全ルームリストを返す
		 *******************************/
		if(state.equals("init") || state.equals("update")) {
			
//System.out.println("RoomList sId : " + sId);
			
			printwriter.println("<roomlist>");
			for(int i=0; i<roommgr.getRoomCount(); i++) {
				
				Room room = new Room();
				
				room = roommgr.getRoom(i);
	
				int rid = room.getId();
				String name = room.getName();
				int num = room.getMemberCount();
				printwriter.println("<room id = \"" + rid +"\" name = \"" + name + "\" members = \"" + num + "\">");
				printwriter.println("</room>");
			}
			printwriter.println("</roomlist>");
			System.out.println("RoomList state = init");
			
		/*******************************
		 *	enter 入室判定およびユーザの追加
		 *******************************/
		
		} else if(state.equals("enter")) {
			
			//roomidを受け取る
			String roomid = req.getParameter("id");

			//idの一致するroomを探す
			Room room = roommgr.searchIdRoom(Integer.parseInt(roomid));
			
			//該当するroomがあった場合
			if(room != null) {
				//部屋の人数が、MAX_MENBER未満のとき、部屋に入室できる
				if(room.getMemberCount() < Room.MAX_MEMBERS){
					//入室処理
					Account ac = accountmgr.getAccount(sId);
					room.addMember(ac);
					printwriter.println("<result state = \"ok\">");
	
				//部屋の人数がMAX_MEMBERSの時、入室できない
				} else {
					printwriter.println("<result state = \"ng\">");
				}
			//idの一致する部屋がなかった場合
			} else {
				printwriter.println("<result state = \"ng\">");
			}
			
			printwriter.println("</result>");
		}
	}
	
	// 返す部分(テスト用)
	public void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, java.io.IOException {

		// 共有させることによってこちらだけで実行できる
		doPost(req, resp);
	}
}