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 BancoFichaAtendimentoDomiciliar {

  protected PreparedStatement pstmt;

  public ResultSet getDados() throws SQLException {
    String sql =
        "SELECT ade.ade_id AS ade_id, "
      + "       ate.ate_compartilhado AS ate_compartilhado, "
      + "       ate.ate_data AS ate_data, "
      + "       uni.uni_codigo_ibge AS ibge_unidade, "
      + "       uni.uni_cnes AS cnes, "
      + "       ade.ate_codigo AS ate_codigo "
      + "  FROM atendimento_domiciliar_esus ade "
      + "  JOIN atendimento ate ON ate.ate_codigo = ade.ate_codigo"
      + "  JOIN unidade uni ON uni.uni_codigo = ate.uni_codigo "
      + " WHERE ade.uuid_ficha IS NULL "
      + " ORDER BY ade.ade_id";

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

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

  public ResultSet getProfissionalPrincipal(Long adeId) throws SQLException {
    String sql = "SELECT usr.cnes_cod_cns AS cns, "
      + "       esp.cod_cbo AS cbo, "
      + "       uni.uni_cnes AS cnes, "
      + "       teq.nu_ine AS ine "
      + "  FROM atendimento_domiciliar_esus ade "
      + "  JOIN atendimento ate ON ade.ate_codigo = ate.ate_codigo "
      + "  JOIN usuarios usr ON usr.usr_codigo = ate.med_codigo "
      + "  JOIN unidade uni ON uni.uni_codigo = ate.uni_codigo "
      + "  JOIN especialidade esp ON esp.esp_codigo = ate.esp_codigo "
      + "  LEFT JOIN tb_equipe teq ON teq.co_seq_equipe = ate.usr_equipe_codigo"
      + " WHERE ade.ade_id = ? ";
    pstmt = CONN.prepareStatement(sql);
    pstmt.setLong(1, adeId);
    return pstmt.executeQuery();
  }

  public ResultSet getProfissionalAuxiliar(Long adeId) throws SQLException {
    String sql = "SELECT usr.cnes_cod_cns as cns, "
      + "       esp.cod_cbo as cbo, "
      + "       uni.uni_cnes as cnes, "
      + "       ate.usr_equipe_codigo as ine "
      + "  FROM atendimento_domiciliar_esus ade "
      + "  JOIN atendimento ate ON ade.ate_codigo = ate.ate_codigo "
      + "  JOIN usuarios usr ON usr.usr_codigo = ate.usr_codigo_compartilhado "
      + "  JOIN unidade uni ON uni.uni_codigo = ate.usr_unidade_compartilhado "
      + "  JOIN especialidade esp on esp.esp_codigo = ate.usr_esp_compartilhado "
      + "  LEFT JOIN tb_equipe teq on teq.co_seq_equipe = ate.usr_equipe_compartilhado "
      + " WHERE ade.ade_id = ? "
      + "   AND ate_compartilhado = 'S'";
    pstmt = CONN.prepareStatement(sql);
    pstmt.setLong(1, adeId);
    return pstmt.executeQuery();
  }

  public ResultSet getDadosAtendimentoDomiciliarChild(Long atendimentoCodigo) throws SQLException {
    String sql = "SELECT usu.usu_cpf AS cpf, "
      + "                usu.usu_cartao_sus AS cns, "
      + "                usu.usu_sexo AS sexo, "
      + "                ate.co_local_atend AS local_atendimento, "
      + "                ma.codigo AS atencao_domiciliar_modalidade, "
      + "                age.tat_codigo AS tipo_atendimento, "
      + "                cid10.cd10_codigo_cid AS cid, "
      + "                tc.co_ciap AS ciap, "
      + "                cd.codigo AS conduta_desfecho, "
      + "                ate.ate_codigo AS codigo_atendimento, "
      + "                usu.usu_datanasc AS data_nascimento, "
      + "                ate.turno AS turno "
      + "           FROM atendimento_domiciliar_esus ade "
      + "           JOIN atendimento ate ON ade.Ate_codigo = ate.ate_codigo "
      + "           JOIN usuario usu ON ate.usu_codigo = usu.usu_codigo "
      + "           JOIN modalidades_ad ma ON ate.modalidade_id = ma.id "
      + "           JOIN agendamento age ON ate.age_codigo = age.age_codigo "
      + "           JOIN conduta_desfecho cd ON ate.conduta_desfecho = cd.id "
      + "           LEFT JOIN rl_cds_atend_individual_ciap rcaic ON rcaic.ate_codigo = ate.ate_codigo "
      + "           LEFT JOIN tb_ciap tc ON tc.co_seq_ciap = rcaic.co_ciap "
      + "           LEFT JOIN cid10 ON ate.cd10_codigo = cid10.cd10_codigo "
      + "          WHERE ate.ate_codigo = ? ";

    pstmt = CONN.prepareStatement(sql);
    pstmt.setLong(1, atendimentoCodigo);
    return pstmt.executeQuery();
  }

  public ResultSet getCondicoesAvaliadas(Long atendimentoCodigo) throws SQLException{
    String sql = "SELECT condicao_avaliada AS condicao "
      + "           FROM atendimento_domiciliar_condicoes_avaliadas "
      + "          WHERE ate_codigo = ?";
    pstmt = CONN.prepareStatement(sql);
    pstmt.setLong(1, atendimentoCodigo);
    return pstmt.executeQuery();
  }

  public ResultSet getProcedimentos(Long atendimentoCodigo) throws SQLException{
    String sql = "SELECT proc.proc_codigo_sus AS procedimento"
      + "           FROM procedimento_atendimento pa"
      + "           JOIN procedimento proc on proc.proc_codigo = pa.proc_codigo"
      + "          WHERE pa.ate_codigo = ?";
    pstmt = CONN.prepareStatement(sql);
    pstmt.setLong(1, atendimentoCodigo);
    return pstmt.executeQuery();
  }
}
