package br.com.elotech.config;

import br.com.elotech.Main;
import lombok.Data;

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

@Data
public class DadosBasicos {

    private static final int SEM_USUARIOS = 0;

    private String usuario;
    private String unidade;
    private String setor;
    private String especialidade;
    private String secretaria;
    private String prefeitura;
    private String endereco;
    private String cidade;

    public DadosBasicos() throws SQLException {
      StringBuilder sql = new StringBuilder();
      Integer usuario = Main.usrLogado;
      if(usuario != SEM_USUARIOS){
        sql.append(" SELECT")
           .append("   trim(usr.usr_nome) as usuario,")
           .append("   UPPER(trim(uni.uni_desc)) as unidade,")
           .append("   trim(coalesce(setor.set_nome, 'Não informado')) as setor, ")
           .append("   trim(coalesce(esp.esp_nome, 'Não informado')) as especialidade, ")
           .append("   UPPER(trim(sec.nome_secretaria)) as secretaria , ")
           .append("   UPPER(trim(sec.nome_cidade)) as cidade , ")
           .append("   UPPER(trim(sec.nome_prefeitura)) as prefeitura, ")
           .append("   trim(concat(uni.uni_endereco, ', ', uni.uni_numero, ' ', uni.uni_bairro)) as endereco ")
           .append(" FROM logon ")
           .append("   JOIN usuarios usr ON usr.usr_codigo = logon.id_login ")
           .append("   LEFT JOIN unidade uni ON uni.uni_codigo = logon.uni_codigo ")
           .append("   LEFT JOIN setor ON setor.set_codigo = logon.cod_setor ")
           .append("   LEFT JOIN especialidade esp ON esp.esp_codigo = logon.esp_codigo ")
           .append("   LEFT JOIN secretaria sec ON sec.sec_as = uni.uni_as OR uni.uni_as IS NULL AND sec.sec_as IS FALSE ")
           .append(" WHERE usr.usr_codigo = ")
           .append(usuario.toString())
           .append(" ORDER BY id DESC ")
           .append(" LIMIT 1");
      }else{
        sql.append("select UPPER(trim(sec.nome_secretaria)) as secretaria ,")
           .append("       UPPER(trim(sec.nome_cidade)) as cidade ,")
           .append("       UPPER(trim(sec.nome_prefeitura)) as prefeitura")
           .append("  from secretaria sec")
           .append(" where sec.sec_as is null or sec.sec_as is false;");
      }

      Connection conn = ConnectionUtil.getConnection();
        try (PreparedStatement pstm = conn.prepareStatement(sql.toString())) {
            ResultSet rs = pstm.executeQuery();
            if(rs.next()) {
              if(usuario != SEM_USUARIOS){
                setUsuario(rs.getString("usuario"));
                setUnidade(rs.getString("unidade"));
                setSetor(rs.getString("setor"));
                setEspecialidade(rs.getString("especialidade"));
                setEndereco(rs.getString("endereco"));
              }
              setSecretaria(rs.getString("secretaria"));
              setPrefeitura(rs.getString("prefeitura"));
              setCidade(rs.getString("cidade"));
          }
        }catch (SQLException e){
            throw new SQLException("Erro ao gerar os dados básicos: " + e.getMessage());
        }
    }
}
