using System;

public class GameLogicHandler : IActionListener, IGameLogicHandler
{
	public static GameLogicHandler instance = new GameLogicHandler();

	public static bool isTryGetIPFromWap;

	public static GameLogicHandler gI()
	{
		return instance;
	}

	public void onConnectFail()
	{
		mSystem.onConnectFail();
	}

	public void onConnectOK()
	{
		mSystem.onConnectOK();
	}

	public void onDisconnect()
	{
		mSystem.onDisconnect();
	}

	public void onLoginFail(string reason)
	{
		mSystem.onLoginFail(reason);
	}

	public void onLoginSuccess()
	{
		if (LoginScr.remember == 1)
		{
			CRes.saveRMS_String("armyUser", LoginScr.gI().tU.getText());
			CRes.saveRMS_String("armyPass", LoginScr.gI().tP.getText());
		}
		else
		{
			CRes.saveRMS_String("armyUser", string.Empty);
			CRes.saveRMS_String("armyPass", string.Empty);
		}
		if (MyMidlet.trainingSuccess)
		{
			CCanvas.startWaitFirstTime(L.pleaseWait());
		}
	}

	public void onRoomList(MyVector roomList)
	{
	}

	public void onBoardList(sbyte roomID, MyVector boardList)
	{
	}

	public void onJoinGameSuccess(int ownerID, int money, MyVector players, sbyte map)
	{
	}

	public void onJoinGameFail(string reason)
	{
		CCanvas.msgdlg.setInfo(reason, null, new Command("OK", this, 1000, null), null);
		CCanvas.msgdlg.show();
	}

	public void onSomeOneJoinBoard(int seat, PlayerInfo joinPersonInfo)
	{
	}

	public void onSomeOneLeaveBoard(int leave, int newOwner)
	{
	}

	public void onSomeOneReady(int id, bool isReady)
	{
		if (id == MyMidlet.myInfo.IDDB)
		{
			InfoDlg.hide();
		}
		CCanvas.prepareScr.setReady(id, isReady);
	}

	public void onOwnerSetMoney(int money3)
	{
	}

	public void onChatFromBoard(string text, int fromID)
	{
		if (CCanvas.prepareScr.isShowing())
		{
			if (PrepareScr.currLevel != 7)
			{
				CCanvas.prepareScr.showChat(fromID, text, 90);
			}
		}
		else if (CCanvas.gameScr.isShowing())
		{
			CCanvas.gameScr.showChat(fromID, text);
		}
	}

	public void onKicked(int kicked, string reason)
	{
		CCanvas.prepareScr.playerLeave(kicked);
		if (PrepareScr.currLevel != 7)
		{
			if (kicked == MyMidlet.myInfo.IDDB)
			{
				CCanvas.startOKDlg(reason, new Command("OK", instance, 1005, null));
			}
			else if (PM.getPlayerByIDDB(kicked) != null)
			{
				PM.getPlayerByIDDB(kicked).IDDB = -1;
				PM.getPlayerByIDDB(kicked).name = string.Empty;
			}
		}
		else if (kicked == MyMidlet.myInfo.IDDB)
		{
			if (CCanvas.curScr == CCanvas.prepareScr)
			{
				MenuScr.gI().show();
				if (MyMidlet.myInfo.currLv >= 2)
				{
					GameService.gI().requestRoomList();
				}
			}
		}
		else
		{
			PM.getPlayerByIDDB(kicked).IDDB = -1;
			PM.getPlayerByIDDB(kicked).name = string.Empty;
		}
	}

	public void onStartGame(sbyte boardID6, sbyte roomID6, MyVector myCards, int whoMoveFirst, sbyte interval)
	{
	}

	public void onMove(sbyte roomID7, sbyte boardID7, int whoMove, sbyte[] movedCards, int nextMove)
	{
	}

	public void onForceLose(sbyte roomID8, sbyte boardID8, int whoLose)
	{
	}

	public void onMoveAndWin(sbyte roomID9, sbyte boardID9, int whoWin, sbyte x1, sbyte y1)
	{
	}

	public void onOpponentWantDraw(sbyte roomID10, sbyte boardID10)
	{
	}

	public void onGameDraw(sbyte roomID11, sbyte boardID11)
	{
	}

	public void onDenyDraw(sbyte roomID12, sbyte boardID12)
	{
	}

	public void onWantLose(sbyte roomID13, sbyte boardID13, int whoLose2)
	{
	}

	public void onRichestList(int page, MyVector richestList)
	{
	}

	public void onStrongestList(int page, MyVector strongestList)
	{
	}

	public void onXepHanglist(sbyte type, sbyte page, MyVector v, string title)
	{
		CCanvas.panel.setTypeTopPlayer();
		CCanvas.panel.show();
	}

	public void onRegisterInfo(string username, bool available, string smsPrefix, string smsTo)
	{
	}

	public void onRegisterInfo2(string content, bool available, string smsTo)
	{
		if (!available)
		{
			CCanvas.startOKDlg(L.ExistsNick());
		}
	}

	public void onChargeMoneySms(string content, string sendTo)
	{
	}

	public void onFriendList(MyVector friendList)
	{
		CCanvas.panel.setTypeFriend(friendList);
		CCanvas.panel.show();
	}

	public void onInviteList(MyVector inviteList)
	{
	}

	public void onSearchResult(MyVector searchList)
	{
		if (searchList.size() > 0)
		{
			for (int i = 0; i < searchList.size(); i++)
			{
				PlayerInfo playerInfo = (PlayerInfo)searchList.elementAt(i);
				if (playerInfo.name.Equals(CCanvas.inputDlg.tfInput.getText()))
				{
					CCanvas.startWaitDlg(L.them() + " " + playerInfo.name + " " + L.vao());
					GameService.gI().addFriend(playerInfo.IDDB);
				}
			}
		}
		else
		{
			CCanvas.startOKDlg(L.notFindID());
		}
	}

	public void onAddFriendResult(int addResult)
	{
	}

	public void onDelFriendResult(int delResult)
	{
		CCanvas.startOKDlg(L.deleteFriendSc());
		GameService.gI().friend(2, delResult);
	}

	public void onMatchResult(MyVector matchResult)
	{
	}

	public void onChatFrom(MsgInfo msg1)
	{
		if (msg1.fromID == -1)
		{
			onServerInfo(msg1.fromName + ": " + msg1.message);
			return;
		}
		if (CCanvas.panel.listMail.size() == 0)
		{
			MsgInfo msgInfo = new MsgInfo();
			msgInfo.fromID = -9999;
			msgInfo.fromName = "Chat thế giới";
			msgInfo.message = string.Empty;
			CCanvas.panel.listMail.addElement(msgInfo);
		}
		CCanvas.panel.listMail.insertElementAt(msg1, 1);
		if (CCanvas.panel.listMail.size() > 20)
		{
			CCanvas.panel.listMail.removeElementAt(CCanvas.panel.listMail.size() - 1);
		}
		CCanvas.panel.nMail++;
		if (CCanvas.panel.isShow && CCanvas.panel.type == 6)
		{
			CCanvas.panel.setTabMail();
		}
	}

	public void onMyUserData(UserData userData)
	{
	}

	public void onAvatar(AvatarInfo avi)
	{
	}

	public void onPing()
	{
	}

	public void onAvatarList(MyVector avs)
	{
	}

	public void onBuyAvtarSuccess(short id)
	{
	}

	public void onMoneyInfo(MyVector mni)
	{
		CCanvas.panel.setTypeMoney();
		CCanvas.panel.show();
	}

	public void onServerInfo(string info)
	{
		CCanvas.infoPopup.setInfo(info);
		CCanvas.infoPopup.show();
	}

	public void onServerMessage(string msg)
	{
		CCanvas.startOKDlg(msg);
	}

	public void onVersion(string info, string url)
	{
		CCanvas.msgdlg.setInfo(info, new Command("Download", this, 1002, info), new Command(string.Empty, this, 1002, info), new Command(L.close(), this, 1003, null));
		CCanvas.msgdlg.show();
	}

	public void onURL(string info, string url, sbyte Auto)
	{
		if (MyMidlet.myInfo != null && MyMidlet.myInfo.name != null)
		{
			NinjaUtil.replace(url, "@username", MyMidlet.myInfo.name);
		}
		if (Auto == 0)
		{
			if (CCanvas.isBB)
			{
				CCanvas.msgdlg.setInfo(info, null, new Command(L.exit(), instance, 1002, url), new Command(L.no(), instance, 1003, null));
			}
			else
			{
				CCanvas.msgdlg.setInfo(info, new Command(L.exit(), instance, 1002, url), new Command(string.Empty, instance, 1002, url), new Command(L.no(), instance, 1003, null));
			}
		}
		else if (Auto == 1)
		{
			CCanvas.msgdlg.setInfo(info, new Command(L.exit(), instance, 1002, url), new Command(string.Empty, instance, 1002, url), new Command(L.no(), instance, 1003, null));
		}
		else if (Auto == 2)
		{
			CCanvas.msgdlg.setInfo(info, new Command(L.exit(), instance, 1002, url), new Command(string.Empty, instance, 1002, url), new Command(L.no(), instance, 1003, null));
			CCanvas.endDlg();
		}
	}

	public void onAdminCommandResponse(string responseText)
	{
	}

	public void onSomeOneFinish(sbyte roomID10, sbyte boardID10, int whoFinish, sbyte finishPosition, int dMoney, int dExp)
	{
	}

	public void onStopGame(sbyte roomID11, sbyte boardID11, int whoShowCards, sbyte[] cardsShow)
	{
	}

	public void onMoveError(sbyte boardID19, sbyte roomID19, string info)
	{
	}

	public void onSetMoneyError(string error)
	{
		CCanvas.startOKDlg(error);
	}

	public void onFireArmy(sbyte whoFire, sbyte type, short x, short y, short angle, sbyte force)
	{
	}

	public void onMoveArmy(sbyte whoMove, short x, short y)
	{
	}

	public void onUpdateXY(sbyte whoUpdateXY, short x, short y)
	{
	}

	public void onStartArmy(sbyte MapID, sbyte timeInterval, short[] playerX, short[] playerY)
	{
	}

	public void onUpdateHP(sbyte whoUpdateHP, short nextHP)
	{
	}

	public void onNextTurn(sbyte whoNext)
	{
	}

	public void onWind(sbyte wind)
	{
	}

	public void onUseItem(int whoUse, sbyte item)
	{
	}

	public void onChooseGun(int userID1, sbyte itemGun)
	{
	}

	public void onMapChanged(sbyte newMap)
	{
		CCanvas.endDlg();
		CCanvas.prepareScr.onMapChanged(newMap);
	}

	public void onChangeTeam(int playerID, sbyte seat)
	{
		InfoDlg.hide();
		CCanvas.prepareScr.onChangeTeam(playerID, seat);
	}

	public void onBonusMoney(int whoBonus, int moneyBonus, int newMoney)
	{
	}

	public void onClanMemberList(sbyte page, MyVector memberList)
	{
	}

	public void onGetImage(short id, Image img)
	{
		if (CCanvas.curScr == CCanvas.prepareScr)
		{
			CCanvas.prepareScr.getPlayerIcon(id, img);
		}
	}

	public void perform(int idAction, object p)
	{
		if (idAction == 5000)
		{
			if (LoginScr.gI().isLogin2)
			{
				MyMidlet.instance.exit();
			}
			else
			{
				CCanvas.endDlg();
			}
		}
		if (idAction == 1000)
		{
			GameService.gI().requestRoomList();
		}
		if (idAction == 1001)
		{
			CCanvas.endDlg();
		}
		if (idAction == 1002)
		{
			string url = (string)p;
			try
			{
				MyMidlet.instance.platformRequest(url);
				MyMidlet.instance.notifyDestroyed();
			}
			catch (Exception)
			{
				Cout.LogTryCatch("gameLogic handler 1002");
			}
		}
		if (idAction == 1003)
		{
			CCanvas.endDlg();
		}
		if (idAction == 1004)
		{
			string url2 = (string)p;
			try
			{
				MyMidlet.instance.platformRequest(url2);
			}
			catch (Exception)
			{
				Cout.LogTryCatch("gameLogic handler 1004");
			}
			CCanvas.endDlg();
		}
		if (idAction == 1005)
		{
			CCanvas.endDlg();
			if (CCanvas.curScr == CCanvas.prepareScr)
			{
				MenuScr.gI().show();
				if (MyMidlet.myInfo.currLv >= 2)
				{
					GameService.gI().requestRoomList();
				}
			}
			else if (CCanvas.curScr == CCanvas.gameScr)
			{
				CCanvas.gameScr.doExitWhenKicked();
				if (MyMidlet.myInfo.currLv >= 2)
				{
					GameService.gI().requestRoomList();
				}
			}
		}
		if (idAction == 2000)
		{
			if (ServerListScreen.nameServer != null && ServerListScreen.nameServer.Length == 1)
			{
				MyMidlet.instance.exit();
				return;
			}
			if (CCanvas.serverScreen == null)
			{
				CCanvas.serverScreen = new ServerListScreen();
			}
			CCanvas.serverScreen.show();
			CCanvas.endDlg();
		}
		if (idAction != 2001)
		{
			return;
		}
		if (!ServerListScreen.loadScreen)
		{
			CCanvas.endDlg();
			if (!LoginScr.gI().isLogin2)
			{
				LoginScr.gI().show();
			}
			else
			{
				MyMidlet.instance.exit();
			}
			if (CCanvas.panel.isShow)
			{
				CCanvas.panel.hide();
			}
			if (CCanvas.panel2 != null && CCanvas.panel2.isShow)
			{
				CCanvas.panel2.hide();
			}
		}
		else if (ServerListScreen.nameServer != null && ServerListScreen.nameServer.Length == 1)
		{
			MyMidlet.instance.exit();
		}
		else
		{
			if (CCanvas.serverScreen == null)
			{
				CCanvas.serverScreen = new ServerListScreen();
			}
			CCanvas.serverScreen.show();
			CCanvas.endDlg();
		}
	}
}
