package br.com.elotech.social.scripts;

import br.com.elotech.social.model.filters.BeneficiosPorAtendenteFilter;

public class BeneficiosPorAtendenteScript {
    private static String subUnidades = "(SELECT unidade.uni_codigo FROM unidade"
            + "   JOIN unidade_usuarios ON unidade.uni_codigo = unidade_usuarios.uni_codigo "
            + "  WHERE unidade_usuarios.usr_codigo = :usrLogado"
            + "    AND unidade.uni_as is TRUE) ";

    public static String getSql(BeneficiosPorAtendenteFilter filter){
      StringBuilder sb = new StringBuilder();


        sb.append("  SELECT ")
          .append("  asbd.asbd_dtentrega      AS data_entrega, ")
          .append("  asbd.asbd_dtcadastro     AS data_cadastro, ")
          .append("  uni.uni_desc             AS unidade, ")
          .append("  usr.usr_nome             AS atendente, ")
          .append("  usu.usu_nome             AS beneficiario, ")
          .append("  ben.beneficio            AS beneficio, ")
          .append("  asbdi.asbdi_qtd          AS quantidade,")
          .append("  CASE asbdi.asbdi_concedido ")
          .append("     WHEN TRUE THEN 'SIM' ")
          .append("     WHEN FALSE THEN 'NÃO' ")
          .append("  END                      AS concedido, ")
          .append("  ase.ase_nome             AS estabelecimento ")
          .append("  FROM as_beneficios_dados AS asbd ")
          .append("  INNER JOIN unidade AS uni ON asbd.uni_codigo = uni.uni_codigo ")
          .append("  INNER JOIN usuario AS usu ON asbd.usu_codigo = usu.usu_codigo ")
          .append("  INNER JOIN usuarios AS usr ON asbd.usr_codigo = usr.usr_codigo ")
          .append("  INNER JOIN as_estabelecimentos AS ase ON asbd.ase_codigo = ase.ase_codigo ")
          .append("  INNER JOIN as_beneficios_dados_itens AS asbdi ON asbd.asbd_codigo = asbdi.asbd_codigo ")
          .append("  INNER JOIN beneficios AS ben ON asbdi.cod_ben = ben.cod_ben ")
          .append("  WHERE 1 = 1 ")
          .append("  AND asbd.asbd_dtcadastro >= :dtInicial")
          .append("  AND asbd.asbd_dtcadastro <= :dtFinal");
        if(filter.getBeneficio()!= null){
            sb.append("  AND asbdi.cod_ben = :beneficio");
        }
        if(filter.getUniCodigo()!= null){
            sb.append(" AND asbd.uni_codigo =:unidade");
        }else{
            sb.append(" AND asbd.uni_codigo IN ".concat(subUnidades));
        }
        if(filter.getProfissional()!=null){
            sb.append(" AND asbd.usr_codigo =:profissional");
        }
        sb.append("  ORDER BY uni.uni_desc, usr.usr_nome, usu.usu_nome");

        return sb.toString();
    }


}
