package br.com.elotech.websaude.odontograma.backend.model;

import br.com.elotech.websaude.odontograma.ui.Application;

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

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

public class OdontoProcedimentoControleModel {

    static PreparedStatement pstmt;
    static String SQL = "";

    public ResultSet getProcedimentos(int tratCodigo) throws SQLException {

        SQL = "SELECT * FROM odonto_procedimentos_controle opc " +
                "LEFT JOIN odonto_procedimentos op ON op.odo_pcon_codigo=opc.odo_pcon_codigo " +
                "INNER JOIN atendimento ate ON ate.ate_codigo=opc.ate_codigo " +
                "INNER JOIN usuarios usr ON ate.med_codigo=usr.usr_codigo " +
                "LEFT JOIN procedimento proc ON proc.proc_codigo=op.proc_codigo " +
                "WHERE odo_trat_codigo=? ORDER BY odo_proc_dtcadastro";
        pstmt = CONN.prepareStatement(SQL);
        pstmt.setInt(1, tratCodigo);

        return pstmt.executeQuery();
    }


    public Integer getCodigoProcedimentoControle(int tratCodigo) throws SQLException {

        int ateCodigo = Integer.valueOf(Application.args[7]);
        String SQL = "SELECT odo_pcon_codigo FROM odonto_procedimentos_controle WHERE odo_trat_codigo=? AND ate_codigo=? LIMIT 1";
        pstmt = CONN.prepareStatement(SQL);
        pstmt.setLong(1, tratCodigo);
        pstmt.setLong(2, ateCodigo);
        ResultSet rs = pstmt.executeQuery();

        System.out.println(pstmt);
        if (rs.next()) {
            return rs.getInt("odo_pcon_codigo");
        }

        SQL = "INSERT INTO odonto_procedimentos_controle(odo_trat_codigo,ate_codigo) VALUES(?,?)";
        pstmt = CONN.prepareStatement(SQL);
        pstmt.setLong(1, tratCodigo);
        pstmt.setLong(2, ateCodigo);
        System.out.println(pstmt);
        pstmt.executeUpdate();
        CONN.commit();

        SQL = "SELECT odo_pcon_codigo FROM odonto_procedimentos_controle WHERE odo_trat_codigo=? AND ate_codigo=? LIMIT 1";
        pstmt = CONN.prepareStatement(SQL);
        pstmt.setLong(1, tratCodigo);
        pstmt.setLong(2, ateCodigo);
        rs = pstmt.executeQuery();

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

        return 0;
    }

    public ResultSet getProcedimentosRealizados(Long usuCodigo) throws SQLException {

        SQL = "SELECT * FROM odonto_procedimentos_controle opc " +
                "INNER JOIN odonto_procedimentos op ON op.odo_pcon_codigo=opc.odo_pcon_codigo " +
                "INNER JOIN atendimento ate ON ate.ate_codigo=opc.ate_codigo " +
                "INNER JOIN usuarios usr ON ate.med_codigo=usr.usr_codigo " +
                "LEFT JOIN procedimento proc ON proc.proc_codigo=op.proc_codigo " +
                "WHERE ate.usu_codigo=? AND op.odo_proc_status=true";
        pstmt = CONN.prepareStatement(SQL);
        pstmt.setLong(1, usuCodigo);

        return pstmt.executeQuery();
    }
}
