package ui;

import model.Reservation;

import org.apache.commons.lang.StringUtils;
import org.springframework.transaction.annotation.Transactional;

import dao.ReservationDao;

public class DeleteReservationUi extends AbstractUi {

	private ReservationDao reservationDao;

	public void setReservationDao(ReservationDao reservationDao) {
		this.reservationDao = reservationDao;
	}

	@Transactional
	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¸¦ ´©¸£¸é ¸Þ´º·Î µ¹¾Æ°©´Ï´Ù.");
	}
}
