require 'active_support/concern'

module Tcm::LicitanteDeParceriaConcern extend ActiveSupport::Concern
  # OC______.OSC"
  # Arquivo 535
  def pesquisa_licitantes_parcerias
		Licitacao::PessoaDoProjeto.joins(projeto: [unidades_orcamentarias_por_pedido: [unidade_orcamentaria: :tipo_de_unidade_administrativa]])
      .where('licitacao_projetos.envia_pro_sim is TRUE')
      .where('base_tipos_de_unidades_administrativas.poder_associado = ?',self.lote.poder_associado)
			.where('licitacao_projetos.data_de_envio_pro_sim BETWEEN ? AND ?', self.lote.data_referencia, self.lote.data_referencia.end_of_month)
      .where('licitacao_projetos.modalidade_do_processo = ? AND licitacao_projetos.status = ?', Licitacao::Projeto.modalidades_do_processo[:parceria_osc], Licitacao::Projeto.status[:homologado]).distinct.all
	end

  def gera_arquivo_licitantes_parcerias
    conteudo = ''
    licitantes = pesquisa_licitantes_parcerias
    licitantes.each do |licitante|
      conteudo << licitante_de_parceria_to_sim(licitante) << "\r\n"
      licitante.update_column(:arquivo_id, self.id)
    end
    self.update_columns(conteudo:conteudo, classe:'Licitacao::PessoaDoProjeto')
  end

  def licitante_de_parceria_to_sim(licitante)
    begin
      licitante.valida_pessoa_juridica
      licitante.valida_cep_pessoa
      licitante.valida_email_pessoa

      texto = ""
      texto << "535".to_s.sim_preenche(3) + "," #1
      texto << Configuracao.first.codigo_do_municipio_no_tcm.to_s.sim_preenche(3) + "," #2
      texto << licitante.projeto.data_de_autuacao.sim_data + "," #3
      texto << licitante.projeto.numero_do_processo.sim_limite(15) + "," #4
      texto << licitante.projeto.sigla_da_modalidade_do_processo.sim_preenche(1) + "," #5
      texto << (licitante.pessoa.pessoa_juridica? ? licitante.pessoa.cnpj : licitante.pessoa.cpf).sim_limite(14) + "," #6
      texto << licitante.pessoa.nome.sim_limite(59) + "," #7
      texto << licitante.pessoa.endereco_completo.gsub(/["\r\n]/, "").sim_limite(255) + "," #8
      texto << licitante.pessoa.telefone.to_s.sim_limite(11) + "," #9
      texto << licitante.pessoa.cep.sim_limite(8) + "," #10
      texto << licitante.pessoa.cidade.nome.sim_limite(30) + "," #11
      texto << licitante.pessoa.cidade.estado.uf.sim_limite(2) + "," #12
      texto << (licitante.lotes_ganhos_ativos.any? ? "S" : "N").sim_limite(1) + "," #13
      texto << (self.try(:lote).present? ? self.lote.exercicio_e_mes_de_geracao : self.exercicio_e_mes_de_geracao).to_s + "," #14
      texto << licitante.pessoa.email.to_s.sim_limite(100) #15

      return texto
    rescue => e
      if e.class.to_s == "NoMethodError"
        atributo_falho = e.message.split(" ")[2]
        coluna = CSV.parse(texto, :headers => false).last.count
        raise e.mensagem_traduzida(licitante, licitante.cpf_do_responsavel, atributo_falho, coluna)
      else
        raise e
      end
    end
  end
end