package br.com.elotech.websaude.integracao.esus.model;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import static br.com.elotech.websaude.integracao.esus.model.dao.Conexao.CONN;

public class BancoAvaliacaoElegibilidadeAdmissao {

  protected PreparedStatement pstmt;

  public ResultSet getDados() throws SQLException {
    String sql = "SELECT ae.*, "
      + "       adp.codigo AS procedencia, "
      + "       ma.codigo AS modalidade, "
      + "       cc.codigo AS cuidador_cidadao, "
      + "       uni.uni_desc AS nome_unidade, "
      + "       usu.usu_nome AS nome_cidadao, "
      + "       usu.usu_nome_social AS nome_social_cidadao, "
      + "       usu.usu_cartao_sus AS cartao_sus_cidadao, "
      + "       usu.usu_cpf AS cpf_cidadao, "
      + "       usu.usu_datanasc AS data_nascimento_cidadao, "
      + "       usu.usu_sexo AS sexo_cidadao, "
      + "       usu.rac_codigo AS raca_cidadao, "
      + "       usu.usu_mae AS nome_mae_cidadao, "
      + "       usu.usu_email AS email_cidadao, "
      + "       usu.usu_pis_pasep AS pis_pasep_cidadao, "
      + "       cidade.cid_codigo_ibge AS codigo_ibge_cidadao, "
      + "       usu.usu_pai AS nome_pai_cidadao, "
      + "       usu.cd_nacionalidade AS nacionalidade_cidadao, "
      + "       usu.dt_naturalizacao AS data_naturalizacao_cidadao, "
      + "       usu.nr_portaria_naturalizacao AS portaria_naturalizacao_cidadao, "
      + "       usu.usu_dt_entrada_pais AS data_entrada_pais_cidadao, "
      + "       usu.epa_codigo AS codigo_pais_cidadao, "
      + "       usu.etn_codigo AS codigo_etnia_cidadao, "
      + "       usr.usr_nome AS nome_profissional_principal, "
      + "       usr2.usr_nome AS nome_profissional_compartilhado, "
      + "       cid10.cd10_descricao AS cid10, "
      + "       cid10s.cd10_descricao AS cid10s, "
      + "       cid10t.cd10_descricao AS cid10t, "
      + "       uni.uni_codigo_ibge AS ibge_unidade, "
      + "       uni.uni_cnes AS cnes, "
      + "       usu2.usu_nome AS nome_cidadao_cuidador, "
      + "       usu2.usu_cpf AS cpf_cuidador, "
      + "       usu2.usu_cartao_sus AS cartao_sus_cuidador "
      + " FROM avaliacao_elegibilidade ae "
      + "  INNER JOIN unidade uni ON uni.uni_codigo = ae.uni_codigo "
      + "  INNER JOIN usuario usu ON usu.usu_codigo = ae.usu_codigo "
      + "  INNER JOIN usuarios usr ON usr.usr_codigo = ae.usr_codigo "
      + "  LEFT JOIN usuarios usr2 ON usr2.usr_codigo = ae.usr_codigo_compartilhado "
      + "  INNER JOIN cid10 ON cid10.cd10_codigo = ae.cid10_codigo "
      + "  LEFT JOIN cid10 cid10s ON cid10s.cd10_codigo = ae.cid10s_codigo "
      + "  LEFT JOIN cid10 cid10t ON cid10t.cd10_codigo = ae.cid10t_codigo "
      + "  LEFT JOIN usuario usu2 ON usu2.usu_codigo = ae.ae_usuario_cuidador "
      + "  LEFT JOIN cidade ON cidade.cid_codigo = usu.cid_codigo_nasc "
      + "  INNER JOIN atencao_domiciliar_procedencia adp ON adp.id = ae.ae_procedencia "
      + "  INNER JOIN modalidades_ad ma ON ma.id = ae.ae_modalidade "
      + "  INNER JOIN cuidador_cidadao cc ON cc.id = ae.ae_cuidador "
      + " WHERE ae.uuid_ficha IS NULL "
      + " ORDER BY ae.ae_codigo";

    return CONN.prepareStatement(sql).executeQuery();

  }

  public boolean atualizaStatus(String uuid, int codigo) throws SQLException {
    String sql = "UPDATE avaliacao_elegibilidade SET uuid_ficha = ? WHERE ae_codigo = ?";
    pstmt = CONN.prepareStatement(sql);
    pstmt.setString(1, uuid);
    pstmt.setInt(2, codigo);
    pstmt.executeUpdate();
    return true;
  }

  public ResultSet getCondicoesAvaliadas(Long aeCodigo) throws SQLException {
    String sql = "SELECT ca.codigo "
      + " FROM avaliacao_elegibilidade_condicoes_avaliadas aeca "
      + "  INNER JOIN condicoes_avaliadas ca ON aeca.condicao_avaliada = ca.id "
      + " WHERE aeca.ae_codigo = ? ";
    pstmt = CONN.prepareStatement(sql);
    pstmt.setLong(1, aeCodigo);
    return pstmt.executeQuery();
  }

  public ResultSet getConclusoesDestino(Long aeCodigo) throws SQLException {
    String sql = "SELECT cd.codigo "
      + " FROM avaliacao_elegibilidade_conclusao_destino aecd "
      + "  INNER JOIN conclusao_destino cd ON aecd.conclusao_destino_id = cd.id "
      + " WHERE aecd.ae_codigo = ?";
    pstmt = CONN.prepareStatement(sql);
    pstmt.setLong(1, aeCodigo);
    return pstmt.executeQuery();
  }

  public ResultSet getEnderecoLocalPermanencia(Long usuCodigo) throws SQLException {
    String sql = "SELECT b.bai_nome AS bairro, "
      + "       r.rua_cep AS cep, "
      + "       c.cid_codigo_ibge AS codigoIbgeMunicipio, "
      + "       d.dom_complemento AS complemento, "
      + "       r.rua_nome AS nomeLogradouro, "
      + "       d.dom_numero AS numero, "
      + "       e.uf_cod_esus AS numeroDneUf, "
      + "       usu.usu_fone AS telefoneContato, "
      + "       d.dom_telefone AS telefoneResidencia, "
      + "       r.co_tipo_logradouro AS tipoLogradouroNumeroDne, "
      + "       d.dom_ponto_referencia AS pontoReferencia "
      + " FROM usuario usu "
      + "  LEFT JOIN domicilio d ON usu.dom_codigo = d.dom_codigo "
      + "  LEFT JOIN rua r ON r.rua_codigo = d.rua_codigo "
      + "  LEFT JOIN bairro b ON b.bai_codigo = r.bai_codigo "
      + "  LEFT JOIN cidade c ON b.cid_codigo = c.cid_codigo "
      + "  LEFT JOIN estado e ON e.uf_codigo = c.uf_codigo "
      + " WHERE usu.usu_codigo = ?";
    pstmt = CONN.prepareStatement(sql);
    pstmt.setLong(1, usuCodigo);
    return pstmt.executeQuery();
  }

  public ResultSet getProfissionalPrincipal(Long aeCodigo) throws SQLException {
    String sql = "SELECT usr.cnes_cod_cns, "
      + "       esp.cod_cbo, "
      + "       uni.uni_cnes, "
      + "       teq.nu_ine "
      + " FROM avaliacao_elegibilidade ae "
      + "  JOIN usuarios usr ON usr.usr_codigo = ae.usr_codigo "
      + "  JOIN unidade uni ON uni.uni_codigo = ae.uni_codigo "
      + "  JOIN especialidade esp ON esp.esp_codigo = ae.esp_codigo "
      + "  LEFT JOIN tb_equipe teq ON teq.co_seq_equipe = ae.co_seq_equipe "
      + " WHERE ae.ae_codigo = ?";
    pstmt = CONN.prepareStatement(sql);
    pstmt.setLong(1, aeCodigo);
    return pstmt.executeQuery();
  }

  public ResultSet getProfissionalAuxiliar(Long aeCodigo) throws SQLException {
    String sql = "SELECT usr.cnes_cod_cns, "
      + "       esp.cod_cbo, "
      + "       uni.uni_cnes, "
      + "       teq.nu_ine "
      + " FROM avaliacao_elegibilidade ae "
      + "  JOIN usuarios usr ON usr.usr_codigo = ae.usr_codigo_compartilhado "
      + "  JOIN unidade uni ON uni.uni_codigo = ae.uni_codigo "
      + "  JOIN especialidade esp ON esp.esp_codigo = ae.esp_codigo_compartilhado "
      + "  LEFT JOIN tb_equipe teq ON teq.co_seq_equipe = ae.co_seq_equipe_compartilhado "
      + " WHERE ae.ae_codigo = ?";
    pstmt = CONN.prepareStatement(sql);
    pstmt.setLong(1, aeCodigo);
    return pstmt.executeQuery();
  }

}
