package ui;

import model.Player;
import model.Team;

import org.apache.commons.lang.StringUtils;

import dao.PlayerDao;
import dao.TeamDao;

public class InsertPlayerUi extends AbstractUi {

    private TeamDao teamDao;

    private PlayerDao playerDao;

    public void setTeamDao(TeamDao teamDao) {
        this.teamDao = teamDao;
    }

    public void setPlayerDao(PlayerDao service) {
        this.playerDao = service;
    }

    public void show() {
        final String playerName = "¼±¼ö¸í";
        // ¸Þ´º Ç¥½Ã
        showMenu(playerName);
        // ÄÜ¼Ö¿¡ ÀÔ·ÂµÈ °ªÀ» Ãëµæ
        String name = getInputedString();
        // ¹®ÀÚ¿­ÀÌ ÀÔ·ÂµÇ¾ú´ÂÁö?
        if (StringUtils.isEmpty(name)) {
            // ¸Þ´º·Î µ¹¾Æ°¡±â
            return;
        // 128¹®ÀÚ ÀÌÇÏÀÎÁö?
        } else if (UiUtils.isSmallLength(name, playerName, 128)) {
            // »õ·Î¿î ¼±¼ö¸¦ »ý¼º
            Player player = new Player();
            player.setName(name);
            // ÆÀÀ» °áÁ¤
            showTeamField(player);
        } else {
            show();
        }
    }

    protected void showTeamField(Player player) {
        final String teamId = "ÆÀID";
        // ¸Þ´º¸¦ Ç¥½Ã
        showMenu(teamId);
        // ÄÜ¼Ö¿¡ ÀÔ·ÂµÈ °ªÀ» Ãëµæ
        String id = getInputedString();
        // ¹®ÀÚ¿­ÀÌ ÀÔ·ÂµÇ¾î ÀÖ´ÂÁö        
        if (StringUtils.isEmpty(id)) {
            return;
        // ¼ýÀÚÀÎÁö?
        } else if (UiUtils.isNumeric(id, teamId)) {
            // ID·Î ÆÀÀ» °Ë»ö
            Team team = this.teamDao.getTeam(Integer.valueOf(id));
            if (team == null) {
                // ÇØ´çÇÏ´Â ÆÀÀÌ Á¸ÀçÇÏÁö ¾Ê´Â´Ù
                System.out.printf("ÀÔ·ÂÇÑ ÆÀ¸í¡¸%s¡¹ÀÎ ÆÀÀº Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù.%n", id);
                showTeamField(player);
            } else {
                // ÆÀÀ» ¼±¼ö¿¡ ÁöÁ¤
                player.setTeam(team);
                // µ¥ÀÌÅÍº£ÀÌ½º¿¡ ¼±¼ö¸¦ µî·Ï
                playerDao.insertPlayer(player);
                System.out.printf("ÆÀ¡¸%s¡¹¿¡ ¡¸%s¡¹¼±¼ö¸¦ Ãß°¡Çß½À´Ï´Ù.%n", team.getName(), player.getName());
            }
        }
    }

    protected void showMenu(String wanted) {
        System.out.println("--------------------");
        System.out.println("¡º¼±¼ö ¸í´Ü¡»¡¸¼±¼ö Ãß°¡¡¹");
        System.out.println("");
        System.out.printf("%s¸¦ ÀÔ·ÂÇÑ ÈÄ, Enter¸¦ ´­·¯ ÁÖ¼¼¿ä.%n", wanted);
        System.out.println("¾Æ¹«°Íµµ ÀÔ·ÂÇÏÁö ¾Ê°í Enter¸¦ ´©¸£¸é ¸Þ´º·Î µ¹¾Æ°©´Ï´Ù.");
    }
}
