package com.rjconsultores.ventaboletos.relatorios.utilitarios;

import java.util.Calendar;

import org.zkoss.zul.Datebox;

import com.rjconsultores.ventaboletos.web.utilerias.MensagensUtils;

public class ValidarDatas {

	private Datebox dataInicial;
	private Datebox dataFinal;
	private Calendar calendarDataInicial;
	private Calendar calendarDataFinal;	
	
	public ValidarDatas(Datebox dataInicial, Datebox dataFinal) {
		this.dataInicial = dataInicial;
		this.dataFinal = dataFinal;
		inicializaCalendar(dataInicial, dataFinal);
	}

	private void inicializaCalendar(Datebox dataInicial, Datebox dataFinal) {
		if (dataInicial.getValue() != null) {
			calendarDataInicial = Calendar.getInstance();
			calendarDataInicial.setTime(dataInicial.getValue());
		}
		
		if (dataFinal.getValue() != null) {
			calendarDataFinal = Calendar.getInstance();
			calendarDataFinal.setTime(dataFinal.getValue());
		}
	}
	
	public boolean isPeriodoNaoInformado() {
		return isPeriodoInicialNaoInformado()
				&& isPeriodoFinalNaoInformado();
	}
	
	public boolean isPeriodoParcialmenteInformado() {
		return (!isPeriodoInicialNaoInformado() && isPeriodoFinalNaoInformado())
				|| (isPeriodoInicialNaoInformado() && !isPeriodoFinalNaoInformado());
	}

	public boolean isPeriodoFinalNaoInformado() {
		return dataFinal.getValue() == null;
	}

	public boolean isPeriodoInicialNaoInformado() {
		return dataInicial.getValue() == null;
	}
	
	public boolean possuiDataInicioMaiorQueTermino() {
		return dataInicial.getValue().after(dataFinal.getValue());
	}
	
	public boolean isMesmoMes() {
		return isMesmoAno()
				&& calendarDataInicial.get(Calendar.MONTH) == calendarDataFinal.get(Calendar.MONTH);
	}

	public boolean isMesmoAno() {
		return calendarDataInicial.get(Calendar.YEAR) == calendarDataFinal.get(Calendar.YEAR);
	}

	public boolean validarPeriodoNaoInformado(String labelMensagem, String tituloMenssagem) {
		if (isPeriodoNaoInformado()) {
			MensagensUtils.showMessageInformation(labelMensagem, tituloMenssagem);
			return true;
		}
		return false;
	}
	
	public boolean validarPeriodoInicialNaoInformado(String labelMensagem, String tituloMenssagem) {
		if (isPeriodoInicialNaoInformado()) {
			MensagensUtils.showMessageInformation(labelMensagem, tituloMenssagem);
			return true;
		}
		return false;
	}
	
	public boolean validarPeriodoFinalNaoInformado(String labelMensagem, String tituloMenssagem) {
		if (isPeriodoFinalNaoInformado()) {
			MensagensUtils.showMessageInformation(labelMensagem, tituloMenssagem);
			return true;
		}
		return false;
	}
	
	public boolean validarDataInicioMaiorQueTermino(String labelMensagem, String tituloMenssagem) {
		if (possuiDataInicioMaiorQueTermino()) {
			MensagensUtils.showMessageInformation(labelMensagem, tituloMenssagem);
			return true;
		}
		return false;
	}
}
