package ui;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.List;

import model.Ticket;
import model.User;

import org.apache.commons.lang.StringUtils;

import dao.TicketDao;
import dao.UserDao;

public class SelectUserUi extends AbstractUi {

	private UserDao userDao;

	private TicketDao ticketDao;

	private DeleteReservationUi deleteReservationUi;

	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}

	public void setTicketDao(TicketDao ticketDao) {
		this.ticketDao = ticketDao;
	}

	public void setDeleteReservationUi(DeleteReservationUi deleteReservationUi) {
		this.deleteReservationUi = deleteReservationUi;
	}

	public void show() {
		// Çì´õ Ç¥½Ã
		showHeader();
		// ¸Þ´º Ç¥½Ã
		showMenu("À¯Àú¸í");
		// ÄÜ¼Ö¿¡ ÀÔ·ÂµÈ °ªÀ» Ãëµæ
		String userName = getInputedString();
		// ¹®ÀÚ¿­ÀÌ ÀÔ·ÂµÇ¾ú´ÂÁö?
		if (StringUtils.isEmpty(userName)) {
			return;
		}
		// ÀÌ¸§À¸·Î À¯Àú¸¦ °Ë»ö
		User user = this.userDao.getUser(userName);
		if (user == null) {
			// ÇØ´çÇÏ´Â À¯Àú°¡ Á¸ÀçÇÏÁö ¾Ê´Â´Ù
			System.out.printf("ÀÔ·ÂÇÑ À¯Àú¸í ¡¸%s¡¹Àº Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù.%n", userName);
			show();
			return;
		}
		// À¯Àú Á¤º¸¸¦ Ç¥½Ã
		showUser(user);
		// ¿¹¾àµÇ¾î ÀÖ´Â Æ¼ÄÏÀ» Ãëµæ
		List<Ticket> ticketList = this.ticketDao.getBookedTicketList(user.getUserId());
		// ¿¹¾àµÇ¾î ÀÖ´Â Æ¼ÄÏ ¸ñ·ÏÀ» Ç¥½Ã
		showBookedTikectList(ticketList);
		
        this.deleteReservationUi.show();

	}

	protected void showBookedTikectList(List<Ticket> ticketList) {

		DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm");
		System.out.println(" ID  ÀÌº¥Æ®¸í  ³¯Â¥  °¡°Ý  ¿¹¾àÀÏ½Ã ");
		for (Ticket ticket : ticketList) {
			// Æ¼ÄÏ°ú ¿¹¾à Á¤º¸¸¦ Ç¥½Ã
			System.out.printf("%s  %s  %s  %s  %s%n", ticket.getTicketId(), ticket.getEvent().getName(), dateFormat
					.format(ticket.getEvent().getDate()), ticket.getRank().getPrice(), dateFormat.format(ticket
					.getReservation().getTimestamp()));
		}
	}

	protected void showUser(User user) {
		System.out.println("--------------------");
		System.out.println("¡ºÆ¼ÄÏ ¿¹¾à¡»¡¸¿¹¾à ¿Ï·á Æ¼ÄÏ ¸ñ·Ï¡¹");
		System.out.println("ID    ÀÌ¸§");
		System.out.printf("%s  %s%n", user.getUserId(), user.getName());
	}

	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¸¦ ´©¸£¸é ¸Þ´º·Î µ¹¾Æ°©´Ï´Ù.");
	}
}
