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

import static com.rjconsultores.ventaboletos.web.gui.controladores.relatorios.integracaoantifraude.RelatorioIntegracaoAntiFraudeController.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 ValidaFormRelatorioIntegracaoAntiFraude 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_STATUS_KONDUTO_NAO_INFORMADO = "relatorioIntegracaoAntiFraudeController.MSG.informarStatusKonduto";
	private static final String MSG_STATUS_KONDUTO_ENVIO_NAO_INFORMADO = "relatorioIntegracaoAntiFraudeController.MSG.informarStatusKondutoEnvio";
	private static final String MSG_STATUS_KONDUTO_TOTALBUS_NAO_INFORMADO = "relatorioIntegracaoAntiFraudeController.MSG.informarStatusKondutoTotalBus";

	private RelatorioIntegracaoAntiFraudeController controller;

	public ValidaFormRelatorioIntegracaoAntiFraude(RelatorioIntegracaoAntiFraudeController controller) {
		this.controller = controller;
	}

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

	private boolean isFiltrosValidos() {
		return possuiStatusKondutoEnvioSelecionado()
				&& possuiStatusKondutoSelecionado()
				&& possuiStatusKondutoTotalBusSelecionado();
	}

	private boolean possuiStatusKondutoEnvioSelecionado() {
		if (controller.getKondutoEnvioList().getSelectedsItens().isEmpty()) {
			MensagensUtils.showMessageInformation(MSG_STATUS_KONDUTO_ENVIO_NAO_INFORMADO, TITULO_RELATORIO);
			return false;
		}
		return true;
	}

	private boolean possuiStatusKondutoSelecionado() {
		if (controller.getKondutoList().getSelectedsItens().isEmpty()) {
			MensagensUtils.showMessageInformation(MSG_STATUS_KONDUTO_NAO_INFORMADO, TITULO_RELATORIO);
			return false;
		}
		return true;
	}

	private Boolean possuiStatusKondutoTotalBusSelecionado() {
		if (controller.getKondutoTotalBusList().getSelectedsItens().isEmpty()) {
			MensagensUtils.showMessageInformation(MSG_STATUS_KONDUTO_TOTALBUS_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);
	}
}
