package br.com.elotech.saude.scripts;

import br.com.elotech.saude.model.filters.materiais.MovimentoSaidaFilter;
import org.apache.commons.lang3.StringUtils;

public abstract class MateriaisScript {

    private static StringBuilder builder;

    public static String getSqlMovimentoSaida(MovimentoSaidaFilter filter){
        builder = new StringBuilder();
        builder.append(" SELECT")
               .append("     s2.set_nome             AS setor,")
               .append("     CASE mov.mov_saida")
               .append("      WHEN 'S'     THEN 'SAÍDA POR CONSUMO'")
               .append("      WHEN 'D'     THEN 'DISPENSAÇÃO PARA PACIENTE'")
               .append("      WHEN 'M'     THEN 'SAÍDA POR EMPRESTIMO'")
               .append("      WHEN 'P'     THEN 'SAÍDA POR PERMUTA'")
               .append("      WHEN 'I'     THEN 'SAÍDA POR INVENTARIO'")
               .append("      WHEN 'A'     THEN 'SAÍDA POR AJUSTE'")
               .append("      WHEN 'R'     THEN 'SAÍDA POR PERDAS'")
               .append("      WHEN 'O'     THEN 'OUTRAS SAÍDAS'")
               .append("      WHEN 'T'     THEN 'TRANSFERÊNCIA'")
               .append("      WHEN 'S-AE'  THEN 'AJUSTE ESTOQUE'")
               .append("      WHEN 'S-AEA' THEN 'AMOSTRA EXPOSIÇÃO_ANÁLISE'")
               .append("      WHEN 'S-TR'  THEN 'TRANSFÊRENCIA REMANEJAMENTO'")
               .append("      WHEN 'S-PE'  THEN 'PERDA'")
               .append("      WHEN 'S-D'   THEN 'DOAÇÃO'")
               .append("      WHEN 'S-VV'  THEN 'VALIDADE VENCIDA'")
               .append("      WHEN 'S-DD'  THEN 'DISTRIBUIÇÃO'")
               .append("      WHEN 'S-DEP' THEN 'DEVOLUÇÃO ENTRADA PRODUTO'")
               .append("      WHEN 'S-EE'  THEN 'DEVOLUÇÃO EMPRÉSTIMO'")
               .append("      WHEN 'S-E'   THEN 'EMPRESTIMO'")
               .append("      WHEN 'S-AS'  THEN 'APREENSÃO SANITÁRIA'")
               .append("      WHEN 'S-PA'  THEN 'USUÁRIO SUS S/ CNS'")
               .append("     END                     AS tipo_saida,")
               .append("     pro.pro_nome            AS produto,")
               .append("     mov.mov_data            AS data_movimento,")
               .append("     SUM(ite.ite_quantidade) AS quantidade")
               .append("  FROM itens_movimento ite")
               .append("  JOIN movimento mov ON ite.mov_codigo = mov.mov_codigo")
               .append("  JOIN setor s2      ON mov.set_saida = s2.set_codigo")
               .append("  JOIN produto pro   ON ite.pro_codigo = pro.pro_codigo")
               .append(" WHERE mov.mov_tipo IN ('S', 'T')")
               .append("   AND mov.mov_data BETWEEN :dtInicial AND :dtFinal");
        if(filter.getSetor() != null){
            builder.append(" AND s2.set_codigo = :setor");
        }
        if(filter.getProduto() != null){
            builder.append(" AND pro.pro_codigo = :produto");
        }
        if(StringUtils.isNotBlank(filter.getTpSaida())){
            builder.append(" AND mov.mov_saida = :tpSaida");
        }
        builder.append(" GROUP BY s2.set_nome , mov.mov_saida, pro.pro_nome, mov.mov_data")
               .append(" ORDER BY s2.set_nome , mov.mov_saida, pro.pro_nome, mov.mov_data");
        return builder.toString();
    }
}
