package br.com.elotech.saude.scripts;

import br.com.elotech.saude.model.filters.prontuario.ReceitaMedicaFilter;

public abstract class ReceitaItemScript {
    private static StringBuilder sb;

    public static String getSqlItens(ReceitaMedicaFilter filter) {
        sb = new StringBuilder();
        sb.append(" SELECT")
          .append("   i.irec_codigo,")
          .append("   i.irec_recomendacao AS itemRecomendacao,")
          .append("   i.irec_quantidade   AS itemQuantidade,")
          .append("   i.irec_produto      AS itemProduto,")
          .append("   i.desc_produto      AS itemDescricaoProduto,")
          .append("   umed.umed_nome      AS itemUnidadeMedida,")
          .append("   pro.pro_nome        AS itemNomeProduto,")
          .append("   rec.rec_validade    AS validade,")
          .append("   rec.rec_data        AS data")
          .append(" FROM itemreceita i")
          .append("   LEFT JOIN produto pro     ON pro.pro_codigo = i.pro_codigo")
          .append("   LEFT JOIN unidmedida umed ON umed.umed_codigo=pro.umed_codigo")
          .append("   JOIN receita rec          ON rec.rec_codigo = i.rec_codigo")
          .append("   JOIN atendimento ate      ON ate.ate_codigo = rec.ate_codigo")
          .append("   JOIN unidade un           ON un.uni_codigo = ate.uni_codigo")
          .append(" WHERE rec_tipo = :tipo");

          if(filter.getSelecionados() != null) {
            sb.append(" AND irec_codigo IN (");
            for (String s : filter.getSelecionados()) {
              sb.append(s).append(",");
            }
            sb.deleteCharAt(sb.length()-1);
            sb.append(")");
          }

          sb.append(" AND ate.ate_codigo = :codigoAtendimento")
            .append(" ORDER BY pro.pro_nome");

      return sb.toString();
    }

  public static String getSqlItensInternacao(ReceitaMedicaFilter filter) {
    sb = new StringBuilder();
    sb.append(" SELECT")
      .append("   ati.io_codigo,")
      .append("   ite.irec_recomendacao AS itemRecomendacao,")
      .append("   ite.irec_quantidade   AS itemQuantidade,")
      .append("   ite.irec_produto      AS itemProduto,")
      .append("   ite.desc_produto      AS itemDescricaoProduto,")
      .append("   umed.umed_nome        AS itemUnidadeMedida,")
      .append("   rec.rec_validade      AS validade,")
      .append("   pro.pro_nome          AS itemNomeProduto")
      .append(" FROM atendimento_internacao ati")
      .append("   JOIN atendimento ate      ON ate.ate_codigo=ati.ate_codigo")
      .append("   JOIN receita rec          ON rec.ate_codigo = ate.ate_codigo")
      .append("   JOIN itemreceita ite      ON rec.rec_codigo = ite.rec_codigo")
      .append("   LEFT JOIN produto pro     ON pro.pro_codigo=ite.pro_codigo")
      .append("   LEFT JOIN unidmedida umed ON umed.umed_codigo=pro.umed_codigo")
      .append(" WHERE io_codigo = :ioCodigo");

    if(filter.getSelecionados() != null) {
      sb.append(" AND ite.irec_codigo IN (");
      for (String s : filter.getSelecionados()) {
        sb.append(s).append(",");
      }
      sb.deleteCharAt(sb.length()-1);
      sb.append(")");
    }

    sb.append(" ORDER BY rec.rec_data");

    return sb.toString();
  }

}
