  module Licitacao::ProcessosHelper
    def valor_estimado_do_processo(processo)
      if processo.respond_to?(:valor_estimado_backup) && processo.valor_estimado_backup.present?
        number_to_currency(processo.valor_estimado_backup)
      elsif processo.respond_to?(:saldo_total) && processo.saldo_total.present?
        number_to_currency(processo.saldo_total.to_f / 100)
      else
        # Buscar direto do backup
        resultado = ActiveRecord::Base.connection.exec_query(
          "SELECT licvalororcado FROM backup.licitacao WHERE licnumero = '#{processo.numero_do_processo.gsub("'", "''")}' LIMIT 1"
        )
        
        if resultado.present? && resultado.rows.any? && resultado.rows[0][0].present?
          number_to_currency(resultado.rows[0][0].to_f)
        else
          ""
        end
      end
    end
    
    def valor_final_do_processo(processo)
      if processo.respond_to?(:valor_final_backup) && processo.valor_final_backup.present?
        number_to_currency(processo.valor_final_backup)
      else
        # Verificar se numero_do_processo não é nulo
        return "" if processo.numero_do_processo.nil?
        
        # Buscar direto do backup - prioridade: adjudicado, limite, orçado
        resultado = ActiveRecord::Base.connection.exec_query(
          "SELECT licvaloradjudicado, licvalorlimite, licvalororcado FROM backup.licitacao WHERE licnumero = '#{processo.numero_do_processo.gsub("'", "''")}' LIMIT 1"
        )
        
        if resultado.present? && resultado.rows.any?
          valor_adjudicado = resultado.rows[0][0]
          valor_limite = resultado.rows[0][1]
          valor_orcado = resultado.rows[0][2]
          
          if valor_adjudicado.present?
            number_to_currency(valor_adjudicado.to_f)
          elsif valor_limite.present?
            number_to_currency(valor_limite.to_f)
          elsif valor_orcado.present?
            number_to_currency(valor_orcado.to_f)
          else
            ""
          end
        else
          ""
        end
      end
    end
    
    def unidade_gestora_do_processo(processo)
      if processo.pedido&.unidade_orcamentaria&.nome.present?
        processo.pedido.unidade_orcamentaria.nome
      else
        # Buscar direto do backup
        begin
          resultado = ActiveRecord::Base.connection.exec_query("
            SELECT b.undnome
            FROM backup.licitacao a
            JOIN backup.unidadeorcamentaria b ON a.codentidade = b.codentidade
            WHERE a.licnumero = '#{processo.numero_do_processo.gsub("'", "''")}' 
            LIMIT 1
          ")
          
          if resultado.present? && resultado.rows.any? && resultado.rows[0][0].present?
            resultado.rows[0][0]
          else
            "Não definida"
          end
        rescue
          "Não definida"
        end
      end
    end

    def rota_processo processo=@processo
      if logado_na_licitacao?
        licitacao_processo_path(processo)
      elsif contabilidade_atual.present?
        contabilidade_processo_path(processo)
      elsif logado_no_administrativo?
        administrativo_processo_path(processo)
      elsif logado_na_gestao_de_estoque?
        gestao_de_estoque_processo_path(processo)
      else
        controladoria_processo_path(processo)
      end
    end
  end
