package page.com.googleoids;

import org.wikiwebserver.handler.http.FormData;
import org.wikiwebserver.handler.http.HTTPHandler;
import org.wikiwebserver.handler.http.interfaces.HTTPResponder;

import page.tools.entity.Browser;

public class HighScoreMonitor implements HTTPResponder {
    
    // The applet posts the score to this page    
    public Object respond(HTTPHandler conn) {
        
        FormData formData = conn.getRequest().getFormData();
        
        if (formData != null) {
            
            String agent = conn.getRequest().getHeaders().getFirst("User-Agent");
            if (agent != null && !agent.contains("Java")) {
                return "Failed, highscore not from applet (" + agent + ")";
            }
            
            Browser b = Browser.getBrowser(conn);
            if (b != null) {            
                String scoreString = formData.getFirst("score");
                String levelString = formData.getFirst("level");
                Long time = new Long(System.currentTimeMillis());
                
                if (scoreString != null) {
                    Long score = Long.parseLong(scoreString);   
                    Integer level = Integer.parseInt(levelString);
                    
                    Long oldHighScore = (Long) b.get("highScore", "Googleoids");
                    Integer oldHighLevel = (Integer) b.get("highLevel", "Googleoids");
                    if (oldHighScore == null || oldHighLevel == null) {
                        b.put("result", "Not bad for a first go!", "Googleoids");
                        oldHighScore = new Long(0);
                        oldHighLevel = new Integer(0);                     
                    }                    
                    else if (score.longValue() > oldHighScore.longValue()) {
                        b.put("result", "Congratulations you beat your high score!", "Googleoids");
                    }     
                    
                    if (score.longValue() <= oldHighScore.longValue()) {
                        b.put("result", "You failed to beat your old high score.", "Googleoids");
                    }        
                    else {
                        b.put("highScore", score, "Googleoids");
                        b.put("highLevel", level, "Googleoids");
                        b.put("highScoreTime", time, "Googleoids");
                    }
                    b.put("lastScore", score, "Googleoids");
                }
                
            }
        }
        
        return "Failed, high score not posted";
    }
}


