package ui;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import model.Event;

import org.apache.commons.lang.StringUtils;

import dao.EventDao;

public class SelectEventUi extends AbstractUi {

	private static final String DATE_FORMAT_MESSAGE = "³¯Â¥´Â YYYYMMDD Çü½ÄÀ¸·Î ÀÔ·ÂÇØÁÖ¼¼¿ä(¿¹:20100101)";

	private EventDao eventDao;

	public void setEventDao(EventDao eventDao) {
		this.eventDao = eventDao;
	}

	public void show() {
		// Çì´õ¸¦ Ç¥½Ã
		showHeader();
		// ¸Þ´º¸¦ Ç¥½Ã
		showMenu("°Ë»ö°³½ÃÀÏ");
		// ÄÜ¼Ö¿¡ ÀÔ·ÂµÈ °ªÀ» Ãëµæ
		Date start = getDate();
		if (start == null) {
			return;
		}
		// ÄÜ¼Ö¿¡ ÀÔ·ÂµÈ °ªÀ» Ãëµæ
		showMenu("°Ë»öÁ¾·áÀÏ");
		Date end = getDate();
		if (end == null) {
			return;
		}
		// °³½ÃÀÏ°ú Á¾·áÀÏÀÇ ÀüÈÄ¸¦ ±¸ºÐ
		if (start.compareTo(end) > 0) {
			System.out.println("°Ë»öÁ¾·áÀÏ¿¡´Â °Ë»ö°³½ÃÀÏ ÀÌÈÄÀÇ ³¯Â¥¸¦ ÀÔ·ÂÇØÁÖ¼¼¿ä");
			show();
			return;
		}
		// ÀÌº¥Æ® Ãëµæ
		List<Event> eventList = this.eventDao.getEventList(start, end);
		// ÀÌº¥Æ® ¸ñ·ÏÀ» Ç¥½Ã
		showEventList(eventList);

	}

	protected void showEventList(List<Event> eventList) {
		System.out.println("--------------------");
		System.out.println("¡º Æ¼ÄÏ ¿¹¾à¡»¡¸ ÀÌº¥Æ® ¸ñ·Ï¡¹");
		System.out.println("ID    ÀÌ¸§    ³¯Â¥");

		DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm");

		for (Event event : eventList) {
			// ÀÌº¥Æ®ID°ú ÀÌº¥Æ®¸í, ³¯Â¥¸¦ Ç¥½Ã
			System.out.printf("%s  %s  %s%n", event.getEventId(), event.getName(), dateFormat.format(event.getDate()));
		}

	}

	protected Date getDate() {

		// ÄÜ¼Ö¿¡ ÀÔ·ÂµÈ °ªÀ» Ãëµæ
		String dateString = getInputedString();
		// ¹®ÀÚ¿­ÀÌ ÀÔ·ÂµÇ¾ú´ÂÁö?
		if (StringUtils.isEmpty(dateString)) {
			return null;
		}

		// 8¹®ÀÚ(yyyyMMdd)ÀÎÁö?
		if (dateString.length() != 8) {
			System.out.println(DATE_FORMAT_MESSAGE);
			return getDate();
		}

		DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");

		Date date;
		try {
			// Date·Î º¯È¯
			date = dateFormat.parse(dateString);
		} catch (ParseException e) {
			// ³¯Â¥·Î º¯È¯ÇÒ ¼ö ¾ø´Â Çü½ÄÀÇ ¹®ÀÚ¿­
			System.out.println(DATE_FORMAT_MESSAGE);
			return getDate();
		}

		// ÇöÀç ³¯Â¥º¸´Ù ¹Ì·¡ÀÎÁö?
		if (new Date().after(date)) {
			System.out.println("ÇöÀç¸¦ ±âÁØÀ¸·Î °ú°Å ³¯Â¥´Â ÀÔ·ÂÇÒ ¼ö ¾ø½À´Ï´Ù. ÇÑ¹ø ´õ ³¯Â¥¸¦ ÀÔ·ÂÇØÁÖ¼¼¿ä.");
			return getDate();
		}

		return date;

	}

	protected void showHeader() {
		System.out.println("--------------------");
		System.out.println("¡º Æ¼ÄÏ ¿¹¾à¡»¡¸ ÀÌº¥Æ® °Ë»ö¡¹");
		System.out.println("");
	}

	protected void showMenu(String wanted) {
		System.out.printf("%s¸¦ ÀÔ·ÂÇÑ ÈÄ Enter¸¦ ´­·¯ÁÖ¼¼¿ä.%n", wanted);
		System.out.println("¾Æ¹«°Íµµ ÀÔ·ÂÇÏÁö ¾Ê°í Enter¸¦ ´©¸£¸é ¸Þ´º·Î µ¹¾Æ°©´Ï´Ù.");
		System.out.println(DATE_FORMAT_MESSAGE);
	}

}
