/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.elotech.websaude.integracao.cnes.backend.controller;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

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

/**
 *
 * @author elotech
 */
public class MedicoEspecialidadeController {

    UnidadeController unidadeController = new UnidadeController();
    PreparedStatement pstmt;

    public int confereCadEspecialidadePorMedico(int usrCodigo, int espCodigo, int uniCodigo) throws SQLException {
        pstmt = CONN.prepareStatement("SELECT mes_codigo FROM medico_especialidade "
                + "WHERE med_codigo=? AND "
                + "esp_codigo=? AND uni_codigo=? order by mes_codigo desc limit 1");

        pstmt.setInt(1, usrCodigo);
        pstmt.setInt(2, espCodigo);
        pstmt.setInt(3, uniCodigo);
        System.out.println(pstmt);
        ResultSet rs = pstmt.executeQuery();

        if(rs.next()){
            return rs.getInt("mes_codigo");
        }

        return 0;

    }

    public void salvar(int usrCodigo,int espCodigo,String cbo, int mesCodigo, int uniCodigo,String cnes) throws SQLException{
        String sql = "";

        if(mesCodigo==0){
            sql = "INSERT INTO medico_especialidade("
                    +(usrCodigo!=0?"med_codigo,":"")
                    +"esp_codigo,"
                    +"uni_codigo,"
                    +"mes_data,"
                    +"mes_ativo) VALUES(?,?,?,CURRENT_DATE ,'A')";

        }else{
            sql = "UPDATE medico_especialidade SET "
                    +(usrCodigo!=0?"med_codigo=?,":"")
                    +"esp_codigo=?,"
                    +"uni_codigo=?,"
                    +"mes_ativo='A' WHERE mes_codigo = ?";
        }

        pstmt = CONN.prepareStatement(sql);
        int count = 1;
        if(usrCodigo!=0){
            pstmt.setInt(count++, usrCodigo);
        }
        pstmt.setInt(count++, espCodigo);
        pstmt.setInt(count++, uniCodigo);

        if(mesCodigo!=0){
            pstmt.setInt(count++, mesCodigo);
        }
        System.out.println(pstmt);
        pstmt.executeUpdate();
        CONN.commit();
    }

    public int inativarEspecialidades(int usrCodigo, String cnes) throws SQLException {
        int uniCodigo = unidadeController.getUnidadeByCnes(cnes);

        String SQL = "SELECT uni_codigo from unidade where uni_codigo = ? AND uni_as <> true";

         pstmt = CONN.prepareStatement(SQL);
         pstmt.setInt(1,uniCodigo);
         ResultSet rs = pstmt.executeQuery();

        if(rs.next()) {
            pstmt = CONN.prepareStatement("UPDATE medico_especialidade SET mes_ativo='I', mes_data_termino = CURRENT_DATE WHERE uni_codigo=? AND med_codigo=? AND not exists (select true from usuarios where usr_mestre='S' AND usr_codigo=medico_especialidade.med_codigo) AND EXISTS(SELECT true FROM logon WHERE med_codigo=id_login AND dt_entrada < (SELECT current_date - integer '60') AND uni_codigo=?)");

            pstmt.setInt(1, uniCodigo);
            pstmt.setInt(2, usrCodigo);
            pstmt.setInt(3, uniCodigo);

            if (uniCodigo != 0 && usrCodigo != 0) {
                pstmt.executeUpdate();
                CONN.commit();
            }
        }
        return uniCodigo;
    }


    public void inativaTodos() throws SQLException {
        CONN.prepareStatement("UPDATE medico_especialidade SET mes_ativo='I', mes_data_termino = CURRENT_DATE WHERE not exists (select true from usuarios where usr_mestre='S' AND usr_codigo=medico_especialidade.med_codigo) AND EXISTS(SELECT true FROM logon WHERE (select usr_codigo from usuarios where usr_codigo=medico_especialidade.med_codigo limit 1)=id_login AND dt_entrada < (SELECT current_date - integer '60'))").executeUpdate();
        CONN.commit();
    }
}
