package somiba.web;

import java.util.List;

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

import org.springframework.web.bind.ServletRequestUtils;
import org.springframework.web.servlet.ModelAndView;

import somiba.Util;
import somiba.domain.Mapping;
import somiba.domain.Player;
import somiba.domain.Season;

public class PlayerQueryController extends AbstractDaoController {
    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest req,
            HttpServletResponse resp) throws Exception {
        String firstName = ServletRequestUtils.getStringParameter(req, "firstName");
        String lastName = ServletRequestUtils.getStringParameter(req, "lastName");
        ModelAndView mav = super.handleRequestInternal(req, resp);
		if (Util.isEmpty(firstName) || Util.isEmpty(lastName)) {
			mav.setViewName("playerQuery");
			mav.addObject("error", "<p>First and last name are both required.</p>");
			return mav;
		}
		if (lastName.length() > 7)
			lastName = lastName.substring(0, 7);
		String name = firstName.charAt(0) + "." + lastName;
		String contents = readData(name.toUpperCase(), firstName, lastName);
		if (Util.isEmpty(contents)) {
			mav.setViewName("playerQuery");
			mav.addObject("error", "<p>" + firstName + " " + lastName + " was not found.</p>");
			return mav;
		}
		mav.addObject("data", contents);
		return mav;
    }

	String readData(String name, String first, String last) {
		name = scopedName(name, first, last);
		Player player = getDaoRepository().getPlayerDao().getByName(name);
		Season totals = getDaoRepository().getSeasonDao().get(name, "", "Totals");
		List<Season> seasonList = getDaoRepository().getSeasonDao().getAllByName(name);
		if (player == null)
			return "";
		return player.printData(totals, seasonList);
	}

	String scopedName(String name, String first, String last) {
		Mapping mapping = getDaoRepository().getMappingDao().getByOriginal(name);
		if (mapping == null)
			return name;
		int count = 1;
		while (true) {
			count++;
			if (last.length() > 8 - count)
				last = last.substring(0, 8 - count);
			String newName = null;
			if (count <= first.length())
				newName = (first.substring(0, count) + "." + last).toUpperCase();
			else { // Dee Brown situation
				newName = (first + "1." + last).toUpperCase();
				if (newName.length() > 9)
					newName = newName.substring(0, 9);
			}
			mapping = getDaoRepository().getMappingDao().getByCustom(newName);
			if (mapping != null)
				return newName;
		}
	}
}
