package cz.beranek.projekt;
import java.util.HashMap;
import java.util.Map;
import net.sf.json.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;
import cz.beranek.model.Hra;
import cz.beranek.model.Hrac;
import cz.beranek.model.ObsazeniDostihu;
import cz.beranek.model.SeznamHracu;
import cz.beranek.model.SpravceHer;
import cz.beranek.model.herniPlan.HerniPlan;
import cz.beranek.model.herniPlan.Kun;
@Controller
@SessionAttributes({"userId", "login","hraId","usrKey"})
public class HraController {
@RequestMapping(value="/hra.start")
public String start(Model model,@ModelAttribute("usrKey") String usrKey,@ModelAttribute("hraId") String hraId,@ModelAttribute("userId") String user){
model.addAttribute("usrKey", Zpravy.upravText(usrKey));
model.addAttribute("user", Zpravy.upravText(user));
return "hra";
}
/**
* Metoda obsluhujici konec tahu hrace
* @param hraId
* @param hracId
* @return
*/
@RequestMapping(value="/konecTahu.do")
public String konecTahu(Model model,@ModelAttribute("hraId") String hraId,@ModelAttribute("userId") String hracId){
//System.out.println(hraId + " konec tahu.");
Hra h = SpravceHer.getInstance().getHra(hraId);
if(h.konecTahu(h.getHrac(hracId))){
//ma pravo prehodit tah
model.addAttribute("JSON", "{\"prepnuto\":true}");
}else{
//nema pravo prehodit tah
model.addAttribute("JSON", "{\"pripraven\":false}");
}
return "JSON";
}
/**
* Metoda pro koupeni pole..musi se overit, zda je hrac na tahu, zda je pole volne, zda ma finance atd
* Pote poslat potvrzeni nebo zamitnuti.
*/
@RequestMapping(value="/KupPole.do")
public String kupPole(Model model,@ModelAttribute("userId") String userId,@ModelAttribute("hraId") String hraId){
Hra hra = SpravceHer.getInstance().getHra(hraId);
Hrac hrac = hra.getHraci().get(userId);
HashMap<String, String> zprava = new HashMap<String, String>(8);
zprava.put("typ", "koupePole");
int res = hra.kupPole(hra.getHrac(userId));
switch(res){
case 0:
// tady pak pouzit odesliKoupiPole (nebo teda nakou metodu ktera to pouzije)
zprava.put("vysledek", "true");
zprava.put("hrac", Integer.toString(hra.getHraci().getPoradi(userId)));
zprava.put("pole", Integer.toString(hrac.getPozice()+1));
break;
case 10:
zprava.put("vysledek", "false");
zprava.put("text", HerniPlan.getPole(hrac.getPozice()) + " pat�� jin�mu hr��i.");
break;
case 20:
zprava.put("vysledek", "false");
zprava.put("text", "Nedostatek pen�z.");
}
JSONObject json = JSONObject.fromObject(zprava);
Zpravy.odesliVsem(hra, json.toString());
return "zprava";
}
/**
* Metoda pro koupeni pole..musi se overit, yda je hrac na tahu, zda je pole volne, zda ma finance atd
* Pote poslat potvrzeni nebo zamitnuti.
*/
@RequestMapping(value="/kupDostih.do")
public String kupDostih(Model model,@ModelAttribute("userId") String userId,@ModelAttribute("hraId") String hraId){
Hra hra = SpravceHer.getInstance().getHra(hraId);
Hrac hrac = hra.getHrac(userId);
int res = hra.kupDostihy(hrac, 1);
//FIXME: kupDostihy. Spring ResourceBundle na text zprav...
switch (res){
case 0:
Kun k = (Kun)HerniPlan.getPole(hrac.getPozice());
int pd = hra.getObsazeniDostihu().getDostihy(k);
Zpravy.odesliPocetDostihu(hra, hrac, pd, hrac.getPozice());
// Zpravy.odesliVsemZpravu(this, k + " je nyn� obsazen " + newKd + " dostihy.");
break;
case 10:
Zpravy.odesliHraciZpravu(hrac, "Dostihy sm� kupovat pouze majitel cel� st�je.");
break;
case 20:
Zpravy.odesliHraciZpravu(hrac, "Tohoto kon� nelze postavit do v�ce dostih�.");
break;
case 21:
Zpravy.odesliHraciZpravu(hrac, "K�� mus� b�t nejpreve postaven do 4 dostih�, aby mohl b�t postaven do hlavn�ho dostihu.");
break;
case 22:
Zpravy.odesliHraciZpravu(hrac, "Nelze koupit tolik dostih�. N�kde je chyba!");
break;
case 23:
Zpravy.odesliHraciZpravu(hrac, "Nelze koupit vedlej�� i hlavn� dostih v jednom kole.");
break;
case 30:
Zpravy.odesliHraciZpravu(hrac, "Dostihy lze zakoupit a� v dal��m kole.");
break;
case 100:
Zpravy.odesliHraciZpravu(hrac, "Nedostatek pen�z na zakoupen� dostih�.");
break;
//Zpravy.odesliPocetDostihu(hra, hrac, , hrac.getPozice()+1);
}
return "zprava";
}
/**
* Metoda pro refresh
*/
@RequestMapping(value="/refresh.do")
public String refreshHry(Model model,@ModelAttribute("userId") String userId,@ModelAttribute("hraId") String hraId){
Hra hr = SpravceHer.getInstance().getHra(hraId);
Map<String, String> zprava = new HashMap<String, String>();
//prace s majetkem
HashMap<String, Integer> tmp= new HashMap<String, Integer>();
Map<Integer, Hrac> majetek = hr.getSeznamMajetku().getVeskeryMajetek();
for (Integer klic : majetek.keySet()) {
tmp.put(Integer.toString(klic+1), hr.getHraci().getPoradi((majetek.get(klic))));
}
JSONObject json=JSONObject.fromObject(tmp);
zprava.put("majetek", json.toString());
//prace s dostihy
tmp= new HashMap<String, Integer>();
Map<Integer, Integer> dostihy = hr.getObsazeniDostihu().getVsechnyDostihy();
for (Integer klic : dostihy.keySet()) {
tmp.put(Integer.toString(klic+1), dostihy.get(klic));
}
JSONObject jsonDostihy=JSONObject.fromObject(tmp);
zprava.put("dostihy", jsonDostihy.toString());
//pozice hracu
tmp= new HashMap<String, Integer>();
for (Hrac hrac : hr.getHraci()) {
tmp.put(Integer.toString(hr.getHraci().getPoradi(hrac.getUserId())), hrac.getPozice()+1);
}
JSONObject jsonPozice=JSONObject.fromObject(tmp);
zprava.put("pozice", jsonPozice.toString());
//hrac na tahu
SeznamHracu sh= hr.getHraci();
Zpravy.odesliHraceNaTahu(hr, sh.naTahu());
//penize
tmp= new HashMap<String, Integer>();
for (Hrac hrac : hr.getHraci()) {
tmp.put(hrac.getUserId(), hrac.getPenize());
}
JSONObject jsonPenize=JSONObject.fromObject(tmp);
zprava.put("penize", jsonPenize.toString());
//zaver
JSONObject jsonZprava=JSONObject.fromObject(zprava);
model.addAttribute("JSON", jsonZprava.toString());
return "JSON";
}
}