package br.com.elotech.saude;

import br.com.elotech.saude.model.filters.*;
import br.com.elotech.saude.model.filters.agendamento.*;
import br.com.elotech.saude.model.filters.atendimento.AtendimentoClassificacaoFilter;
import br.com.elotech.saude.model.filters.bpa.BpaIdadeFilter;
import br.com.elotech.saude.model.filters.bpa.ProcedimentosGeraisFilter;
import br.com.elotech.saude.model.filters.bpa.ProcedimentosUnidadeFilter;
import br.com.elotech.saude.model.filters.estratificacao.*;
import br.com.elotech.saude.model.filters.farmacia.ConsultaDadosHorusFilter;
import br.com.elotech.saude.model.filters.farmacia.DispensacaoTipoReceitaFilter;
import br.com.elotech.saude.model.filters.laboratorio.ExamesPorPrestadorFilter;
import br.com.elotech.saude.model.filters.materiais.ContagemEstoqueFilter;
import br.com.elotech.saude.model.filters.materiais.InventarioFilter;
import br.com.elotech.saude.model.filters.materiais.MovimentoSaidaFilter;
import br.com.elotech.saude.model.filters.materiais.SaidaTransferenciaMateriaisFilter;
import br.com.elotech.saude.model.filters.paciente.EtiquetaFilter;
import br.com.elotech.saude.model.filters.prontuario.ConcessaoFilter;
import br.com.elotech.saude.model.filters.prontuario.LaudoApacFilter;
import br.com.elotech.saude.model.filters.prontuario.ReceitaMedicaEspecialFilter;
import br.com.elotech.saude.model.filters.prontuario.ReceitaMedicaFilter;
import br.com.elotech.saude.model.filters.psf.BuscaAtivaFilter;
import br.com.elotech.saude.model.filters.psf.DomicilioVinculadoFilter;
import br.com.elotech.saude.model.filters.psf.PrescricaoMedicamentosFilter;
import br.com.elotech.saude.model.filters.psf.VisitaDomiciliarFilter;
import br.com.elotech.saude.model.filters.transporte.ViagemFilter;
import br.com.elotech.saude.model.filters.transporte.ViagensFilter;
import br.com.elotech.saude.model.filters.vacinacao.CarteirinhaVacinacaoFilter;
import br.com.elotech.saude.model.filters.vacinas.AtestadoVacinaFilter;
import br.com.elotech.saude.model.filters.vacinas.ControleVacinadosPorVacinaFilter;
import br.com.elotech.saude.service.SaudeService;
import br.com.elotech.saude.service.impl.SaudeServiceImpl;
import br.com.elotech.util.Util;

public class SaudeController implements Saude {

  private SaudeService service = new SaudeServiceImpl();

  public void gerarRelatorio(String relatorio, Object filter) throws Exception {
    switch (relatorio.toLowerCase()) {
    case "agendamentoporunidade":
      agendamentoPorUnidade(filter);
      break;
    case "filadeespera":
      filaDeEspera(filter);
      break;
    case "producaofiladeespera":
      producaoFilaDeEspera(filter);
      break;
    case "estratificacaohdi":
      estratificacaoHdi(filter);
      break;
    case "prescricaomedicamentos":
      prescricaoMedicamentos(filter);
      break;
    case "estratificacaogestantespuerperas":
      estratificacaoGestantesPuerperas(filter);
      break;
    case "estratificacaosaudebucal":
      estratificacaoSaudeBucal(filter);
      break;
    case "estratificacaosaudemental":
      estratificacaoSaudeMental(filter);
      break;
    case "estratificacaofamiliar":
      estratificacaoFamiliar(filter);
      break;
    case "estatisticasareamicroarea":
      estatisticasAreaMicroarea(filter);
      break;
    case "estratificacaocrianca":
      estratificacaoCrianca(filter);
      break;
    case "agendamentoporprofissional":
      agendamentoPorProfissional(filter);
      break;
    case "saidatransferenciamateriais":
      saidaTransferenciaMateriais(filter);
      break;
    case "atestadovacina":
      atestadoVacina(filter);
      break;
    case "controlevacinadosporvacina":
      controleVacinadosPorVacina(filter);
      break;
    case "procedimentosgerais":
      procedimentosGerais(filter);
      break;
    case "procedimentosunidade":
      procedimentosUnidade(filter);
      break;
    case "consultasagendadas":
      consultasAgendadas(filter);
      break;
    case "carteirinhavacinacao":
      carteirinhaVacinacao(filter);
      break;
    case "guiaencaminhamentoexterno":
      guiaEncaminhamentoExterno(filter);
      break;
    case "pacientesfaixasexo":
      pacientesFaixaSexo(filter);
      break;
    case "movimentosaida":
      movimentoSaida(filter);
      break;
    case "visitadomiciliar":
      visitaDomiciliar(filter);
      break;
    case "agendamentoexternomedico":
      agendamentoExternoMedico(filter);
      break;
    case "buscaativa":
      buscaAtiva(filter);
      break;
    case "agendamentoexternounidade":
      agendamentoExternoUnidade(filter);
      break;
    case "bpaidade":
      bpaIdade(filter);
      break;
    case "laudoapac":
      laudoApac(filter);
      break;
    case "inventario":
      inventario(filter);
      break;
    case "dispensacaotiporeceita":
      dispensacaoTipoReceita(filter);
      break;
    case "listaviagem":
      listaViagem(filter);
      break;
    case "examesporprestador":
      examesPorPrestador(filter);
      break;
    case "domiciliovinculado":
      domicilioVinculado(filter);
      break;
    case "viagens":
      viagens(filter);
      break;
    case "receitamedica":
      receitaMedica(filter);
      break;
    case "receitamedicaespecial":
      receitaMedicaEspecial(filter);
      break;
    case "atendimentosclassificacao":
      atendimentosClassificacao(filter);
      break;
    case "concessao":
      concessao(filter);
      break;
    case "etiquetapaciente":
      etiquetaPaciente(filter);
      break;
    case "contagemestoque":
      contagemEstoque(filter);
      break;
    case "consultadadoshorus":
      consultaDadosHorus(filter);
      break;
    }
  }

  @Override
  public void prescricaoMedicamentos(Object filter) throws Exception {
    PrescricaoMedicamentosFilter pmFilter = (PrescricaoMedicamentosFilter) Util.fromJsom(filter.toString(), PrescricaoMedicamentosFilter.class);
    service.prescricaoMedicamentos(pmFilter);
  }

  private void movimentoSaida(Object filter) throws Exception {
    MovimentoSaidaFilter movSaiFilter = (MovimentoSaidaFilter) Util.fromJsom(filter.toString(), MovimentoSaidaFilter.class);
    service.movimentoSaida(movSaiFilter);
  }

  private void carteirinhaVacinacao(Object filter) throws Exception {
    CarteirinhaVacinacaoFilter cvFilter = (CarteirinhaVacinacaoFilter) Util.fromJsom(filter.toString(), CarteirinhaVacinacaoFilter.class);
    service.carteirinhaVacinacao(cvFilter);
  }

  private void procedimentosGerais(Object filter) throws Exception {
    ProcedimentosGeraisFilter procFilter = (ProcedimentosGeraisFilter) Util.fromJsom(filter.toString(), ProcedimentosGeraisFilter.class);
    service.procedimentosGerais(procFilter);
  }

  @Override
  public void procedimentosUnidade(Object filter) throws Exception {
    ProcedimentosUnidadeFilter procFilter = (ProcedimentosUnidadeFilter) Util.fromJsom(filter.toString(), ProcedimentosUnidadeFilter.class);
    service.procedimentosUnidade(procFilter);
  }

  @Override
  public void agendamentoPorUnidade(Object filter) throws Exception {
    AgendamentoPorUnidadeFilter ageFilter = (AgendamentoPorUnidadeFilter) Util.fromJsom(filter.toString(), AgendamentoPorUnidadeFilter.class);
    service.agendamentoPorUnidade(ageFilter);
  }

  @Override
  public void filaDeEspera(Object filter) throws Exception {
    FilaDeEsperaFilter filaFilter = (FilaDeEsperaFilter) Util.fromJsom(filter.toString(), FilaDeEsperaFilter.class);
    service.filaDeEspera(filaFilter);
  }

  @Override
  public void producaoFilaDeEspera(Object filter) throws Exception {
    ProducaoFilaDeEsperaFilter filaFilter = (ProducaoFilaDeEsperaFilter) Util.fromJsom(filter.toString(), ProducaoFilaDeEsperaFilter.class);
    service.producaoFilaDeEspera(filaFilter);
  }

  @Override
  public void estratificacaoHdi(Object filter) throws Exception {
    EstratificacaoHdiFilter hdiFilter = (EstratificacaoHdiFilter) Util.fromJsom(filter.toString(), EstratificacaoHdiFilter.class);
    service.estratificacaoHdi(hdiFilter);
  }

  @Override
  public void estratificacaoGestantesPuerperas(Object filter) throws Exception {
    EstratificacaoGestantesPuerperasFilter gestantesPuerperasFilter = (EstratificacaoGestantesPuerperasFilter) Util.fromJsom(filter.toString(), EstratificacaoGestantesPuerperasFilter.class);
    service.estratificacaoGestantesPuerperas(gestantesPuerperasFilter);
  }

  @Override
  public void estratificacaoSaudeBucal(Object filter) throws Exception {
    EstratificacaoSaudeBucalFilter saudeBucalFilter = (EstratificacaoSaudeBucalFilter) Util.fromJsom(filter.toString(), EstratificacaoSaudeBucalFilter.class);
    service.estratificacaoSaudeBucal(saudeBucalFilter);
  }

  @Override
  public void estratificacaoSaudeMental(Object filter) throws Exception {
    EstratificacaoSaudeMentalFilter saudeMentalFilter = (EstratificacaoSaudeMentalFilter) Util.fromJsom(filter.toString(), EstratificacaoSaudeMentalFilter.class);
    service.estratificacaoSaudeMental(saudeMentalFilter);
  }

  @Override
  public void estratificacaoFamiliar(Object filter) throws Exception {
    EstratificacaoFamiliarFilter familiarFilter = (EstratificacaoFamiliarFilter) Util.fromJsom(filter.toString(), EstratificacaoFamiliarFilter.class);
    service.estratificacaoFamiliar(familiarFilter);
  }

  @Override
  public void estatisticasAreaMicroarea(Object filter) throws Exception {
    EstatisticasAreaMicroAreaFilter eamaFilter = (EstatisticasAreaMicroAreaFilter) Util.fromJsom(filter.toString(), EstatisticasAreaMicroAreaFilter.class);
    service.estatisticasAreaMicroArea(eamaFilter);
  }

  @Override
  public void estratificacaoCrianca(Object filter) throws Exception {
    EstratificacaoCriancaFilter criancaFilter = (EstratificacaoCriancaFilter) Util.fromJsom(filter.toString(), EstratificacaoCriancaFilter.class);
    service.estratificacaoCrianca(criancaFilter);
  }

  @Override
  public void agendamentoPorProfissional(Object filter) throws Exception {
    AgendamentoPorProfissionalFilter ageProfissionalFilter = (AgendamentoPorProfissionalFilter) Util.fromJsom(filter.toString(), AgendamentoPorProfissionalFilter.class);
    service.agendamentoPorProfissional(ageProfissionalFilter);
  }

  @Override
  public void saidaTransferenciaMateriais(Object filter) throws Exception {
    SaidaTransferenciaMateriaisFilter saidaTransferenciaMateriaisFilter = (SaidaTransferenciaMateriaisFilter) Util.fromJsom(filter.toString(), SaidaTransferenciaMateriaisFilter.class);
    service.saidaTransferenciaMateriais(saidaTransferenciaMateriaisFilter);
  }

  @Override
  public void atestadoVacina(Object filter) throws Exception {
    AtestadoVacinaFilter atestadoVacinaFilter = (AtestadoVacinaFilter) Util.fromJsom(filter.toString(), AtestadoVacinaFilter.class);
    service.atestadoVacina(atestadoVacinaFilter);
  }

  @Override
  public void controleVacinadosPorVacina(Object filter) throws Exception {
    ControleVacinadosPorVacinaFilter controleFilter = (ControleVacinadosPorVacinaFilter) Util.fromJsom(filter.toString(), ControleVacinadosPorVacinaFilter.class);
    service.controleVacinadosPorVacina(controleFilter);
  }

  @Override
  public void consultasAgendadas(Object filter) throws Exception {
    ConsultasAgendadasFilter consultasAgendadasFilter = (ConsultasAgendadasFilter) Util.fromJsom(filter.toString(), ConsultasAgendadasFilter.class);
    service.consultasAgendadas(consultasAgendadasFilter);
  }

  @Override
  public void guiaEncaminhamentoExterno(Object filter) throws Exception {
    GuiaEncaminhamentoExternoFilter guiaFilter = (GuiaEncaminhamentoExternoFilter) Util.fromJsom(filter.toString(), GuiaEncaminhamentoExternoFilter.class);
    service.guiaEncaminhamentoExterno(guiaFilter);
  }

  @Override
  public void pacientesFaixaSexo(Object filter) throws Exception {
    PacientesFaixaSexoFilter faixaSexoFilter = (PacientesFaixaSexoFilter) Util.fromJsom(filter.toString(), PacientesFaixaSexoFilter.class);
    service.pacientesFaixaSexo(faixaSexoFilter);
  }

  @Override
  public void visitaDomiciliar(Object filter) throws Exception {
    VisitaDomiciliarFilter visitaDomiciliarFilter = (VisitaDomiciliarFilter) Util.fromJsom(filter.toString(), VisitaDomiciliarFilter.class);
    service.visitaDomiciliar(visitaDomiciliarFilter);
  }

  @Override
  public void buscaAtiva(Object filter) throws Exception {
    BuscaAtivaFilter buscaAtivaFilter = (BuscaAtivaFilter) Util.fromJsom(filter.toString(), BuscaAtivaFilter.class);
    service.buscaAtiva(buscaAtivaFilter);
  }

  @Override
  public void bpaIdade(Object filter) throws Exception {
    BpaIdadeFilter procFilter = (BpaIdadeFilter) Util.fromJsom(filter.toString(), BpaIdadeFilter.class);
    service.bpaIdade(procFilter);
  }

  @Override
  public void agendamentoExternoMedico(Object filter) throws Exception {
    AgendamentoExternoMedicoFilter externoMedicoFilter = (AgendamentoExternoMedicoFilter) Util.fromJsom(filter.toString(), AgendamentoExternoMedicoFilter.class);
    service.agendamentoExternoMedico(externoMedicoFilter);
  }

  @Override
  public void agendamentoExternoUnidade(Object filter) throws Exception {
    AgendamentoExternoUnidadeFilter externoUnidadeFilter = (AgendamentoExternoUnidadeFilter) Util.fromJsom(filter.toString(), AgendamentoExternoUnidadeFilter.class);
    service.agendamentoExternoUnidade(externoUnidadeFilter);
  }

  @Override
  public void laudoApac(Object filter) throws Exception {
    LaudoApacFilter laudoApacFilter = (LaudoApacFilter) Util.fromJsom(filter.toString(), LaudoApacFilter.class);
    service.laudoApac(laudoApacFilter);
  }

  @Override
  public void inventario(Object filter) throws Exception {
    InventarioFilter inventarioFilter = (InventarioFilter) Util.fromJsom(filter.toString(), InventarioFilter.class);
    service.inventario(inventarioFilter);
  }

  @Override
  public void dispensacaoTipoReceita(Object filter) throws Exception {
    DispensacaoTipoReceitaFilter dispensacaoTipoReceitaFilter = (DispensacaoTipoReceitaFilter) Util.fromJsom(filter.toString(), DispensacaoTipoReceitaFilter.class);
    service.dispensacaoTipoReceita(dispensacaoTipoReceitaFilter);
  }

  @Override
  public void listaViagem(Object filter) throws Exception {
    ViagemFilter viagemFilter = (ViagemFilter) Util.fromJsom(filter.toString(), ViagemFilter.class);
    service.listaViagem(viagemFilter);
  }

  @Override
  public void examesPorPrestador(Object filter) throws Exception {
    ExamesPorPrestadorFilter examesPorPrestadorFilter = (ExamesPorPrestadorFilter) Util.fromJsom(filter.toString(), ExamesPorPrestadorFilter.class);
    service.examesPorPrestador(examesPorPrestadorFilter);
  }

  @Override
  public void domicilioVinculado(Object filter) throws Exception {
    DomicilioVinculadoFilter domicilioVinculadoFilter = (DomicilioVinculadoFilter) Util.fromJsom(filter.toString(), DomicilioVinculadoFilter.class);
    service.domicilioVinculado(domicilioVinculadoFilter);
  }

  @Override
  public void viagens(Object filter) throws Exception {
    ViagensFilter viagensFilter = (ViagensFilter) Util.fromJsom(filter.toString(), ViagensFilter.class);
    service.viagens(viagensFilter);
  }

  @Override
  public void receitaMedica(Object filter) throws Exception {
    ReceitaMedicaFilter receitaMedicaFilter = (ReceitaMedicaFilter) Util.fromJsom(filter.toString(), ReceitaMedicaFilter.class);
    service.receitaMedica(receitaMedicaFilter);
  }

  @Override
  public void receitaMedicaEspecial(Object filter) throws Exception {
    ReceitaMedicaEspecialFilter receitaMedicaEspecialFilter = (ReceitaMedicaEspecialFilter) Util.fromJsom(filter.toString(), ReceitaMedicaEspecialFilter.class);
    service.receitaMedicaEspecial(receitaMedicaEspecialFilter);
  }

  @Override
  public void atendimentosClassificacao(Object filter) throws Exception {
    AtendimentoClassificacaoFilter atendimentoClassificacaoFilter = (AtendimentoClassificacaoFilter) Util.fromJsom(filter.toString(), AtendimentoClassificacaoFilter.class);
    service.atendimentosClassificacao(atendimentoClassificacaoFilter);
  }

  @Override
  public void concessao(Object filter) throws Exception {
    ConcessaoFilter concessaoFilter = (ConcessaoFilter) Util.fromJsom(filter.toString(), ConcessaoFilter.class);
    service.concessao(concessaoFilter);
  }

  @Override public void etiquetaPaciente(Object filter) throws Exception {
    EtiquetaFilter etiquetaFilter = (EtiquetaFilter) Util.fromJsom(filter.toString(), EtiquetaFilter.class);
    service.etiquetaPaciente(etiquetaFilter);
  }

  @Override
  public void contagemEstoque(Object filter) throws Exception {
    ContagemEstoqueFilter contagemEstoqueFilter = (ContagemEstoqueFilter) Util.fromJsom(filter.toString(), ContagemEstoqueFilter.class);
    service.contagemEstoque(contagemEstoqueFilter);
  }

  @Override
  public void consultaDadosHorus(Object filter) throws Exception {
    ConsultaDadosHorusFilter consultaDadosHorusFilter = (ConsultaDadosHorusFilter) Util.fromJsom(filter.toString(), ConsultaDadosHorusFilter.class);
    service.consultaDadosHorus(consultaDadosHorusFilter);
  }
}
