package com.rjconsultores.ventaboletos.web.gui.controladores.relatorios.vendabilheteidoso;

import static com.rjconsultores.ventaboletos.web.gui.controladores.relatorios.vendabilheteidoso.RelatorioPosicaoVendaBilheteIdosoController.TITULO_RELATORIO;

import com.rjconsultores.ventaboletos.relatorios.utilitarios.ValidaForm;
import com.rjconsultores.ventaboletos.relatorios.utilitarios.ValidarDatas;
import com.rjconsultores.ventaboletos.web.utilerias.MensagensUtils;

public class ValidaFormRelatorioVendaBilheteIdoso implements ValidaForm {
	
	private static final String MSG_PERIODO_NAO_INFORMADO = "relatorioPosicaoVendaBilheteIdosoController.MSG.informarFiltroData";
	private static final String MSG_PERIODO_INCOMPLETO = "relatorioPosicaoVendaBilheteIdosoController.MSG.informarData";
	private static final String MSG_DATA_INICIAL_MAIOR_FINAL = "relatorioPosicaoVendaBilheteIdosoController.MSG.dataInicialMaiorFinal";
	private static final String MSG_EMPRESA_NAO_INFORMADO = "relatorioPosicaoVendaBilheteIdosoController.MSG.informarEmpresa";
	private static final String MSG_LINHA_NAO_INFORMADO = "relatorioPosicaoVendaBilheteIdosoController.MSG.informarLinha";
	private static final String MSG_TP_PASSAGEM_NAO_INFORMADO = "relatorioPosicaoVendaBilheteIdosoController.MSG.informarTpPassagem";

	private RelatorioPosicaoVendaBilheteIdosoController controller;
	
	public ValidaFormRelatorioVendaBilheteIdoso(RelatorioPosicaoVendaBilheteIdosoController controller) {
		this.controller = controller;
	}

	@Override
	public boolean isValido() {
		return isDatasValidas() 
				&& isFiltrosValidos();
	}

	private boolean isFiltrosValidos() {
		return possuiEmpresaSelecionada()
				&& possuiLinhaSelecionada()
				&& possuiTipoPassagemSelecionado();
	}

	private Boolean possuiTipoPassagemSelecionado() {
		if (!controller.possuiTipoPassagemSelecionado()) {
			MensagensUtils.showMessageInformation(MSG_TP_PASSAGEM_NAO_INFORMADO, TITULO_RELATORIO);
			return false;
		}
		return true;
	}

	private Boolean possuiLinhaSelecionada() {
		if (!controller.possuiLinhaSelecionada()) {
			MensagensUtils.showMessageInformation(MSG_LINHA_NAO_INFORMADO, TITULO_RELATORIO);
			return false;
		}
		return true;
	}

	private boolean possuiEmpresaSelecionada() {
		if (controller.getEmpresaSelecionada() == null) {
			MensagensUtils.showMessageInformation(MSG_EMPRESA_NAO_INFORMADO, TITULO_RELATORIO);
			return false;
		}
		return true;
	}

	private boolean isDatasValidas() {
		ValidarDatas validadorData = new ValidarDatas(controller.getDtInicial(), controller.getDtFinal());
		
		if (validadorData.isPeriodoNaoInformado()) {
			MensagensUtils.showMessageInformation(MSG_PERIODO_NAO_INFORMADO, TITULO_RELATORIO);
			return false;
		}
		
		if (validadorData.isPeriodoParcialmenteInformado()) {
			MensagensUtils.showMessageInformation(MSG_PERIODO_INCOMPLETO, TITULO_RELATORIO);
			return false;
		}
		
		return !validadorData.validarDataInicioMaiorQueTermino(MSG_DATA_INICIAL_MAIOR_FINAL, TITULO_RELATORIO);
	}
}
