package ui;

import model.Reservation;

import org.apache.commons.lang.StringUtils;

import dao.ReservationDao;

public class DeleteReservationUi extends AbstractUi {

	private ReservationDao reservationDao;

	public void setReservationDao(ReservationDao reservationDao) {
		this.reservationDao = reservationDao;
	}

	public void show() {
		// Çì´õ¸¦ Ç¥½Ã
		showHeader();
		// ÄÜ¼Ö¿¡¼­ ÀÔ·ÂµÈ °ªÀ» Ãëµæ
		Integer reservationId = getReservationId();
		if (reservationId == null) {
			return;
		}
		// ID·Î ¿¹¾àÀ» °Ë»ö
		Reservation reservation = this.reservationDao.getReservation(reservationId);
		if (reservation == null) {
			// ÇØ´çÇÏ´Â ¿¹¾àÀº Á¸ÀçÇÏÁö ¾Ê´Â´Ù
			System.out.println("ÀÔ·ÂµÈ ID¿¡ ÇØ´çÇÏ´Â ¿¹¾àÀº Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù");
			show();
		}
		// ¿¹¾àÀ» Ãë¼Ò
		this.reservationDao.cancelReservation(reservation);
		System.out.printf("ID°¡ '%s'ÀÎ ¿¹¾àÀ» Ãë¼ÒÇß½À´Ï´Ù.%n", reservationId);
	}

	protected Integer getReservationId() {
		// ÄÜ¼Ö¿¡¼­ ÀÔ·ÂµÈ °ªÀ» Ãëµæ
		String reservationId = getInputedString();
		// ¹®ÀÚ¿­ÀÌ ÀÔ·ÂµÇ¾î ÀÖ´ÂÁö?
		if (StringUtils.isBlank(reservationId)) {
			return null;
		}
		// ¼ýÀÚÀÎÁö?
		if (StringUtils.isNumeric(reservationId)) {
			return Integer.valueOf(reservationId);
		}
		System.out.println("ID´Â ¼ýÀÚ·Î ÀÔ·ÂÇØ ÁÖ¼¼¿ä.");

		return getReservationId();
	}

	protected void showHeader() {
		System.out.println("--------------------");
		System.out.println("¡ºÆ¼ÄÏ ¿¹¾à¡»¡¸¿¹¾à Ãë¼Ò¡¹");
		System.out.println("");
		System.out.println("¿¹¾àÀ» Ãë¼ÒÇÒ Æ¼ÄÏÀÇ ID¸¦ ÀÔ·ÂÇÑ ÈÄ Enter¸¦ ´­·¯ÁÖ¼¼¿ä.");
		System.out.println("¾Æ¹«°Íµµ ÀÔ·ÂÇÏÁö ¾Ê°í Enter¸¦ ´©¸£¸é ¸Þ´º·Î µ¹¾Æ°©´Ï´Ù.");
	}
}
