class Contabilidade::ItemDoRetornoBancario < ApplicationRecord
  include TradutorConcern

  has_paper_trail

  belongs_to :retorno_bancario
  belongs_to :pagamento_do_lote_bancario

  attr_accessor :conteudo

  before_create :ler_conteudo
  after_create :processar_pagamento

  def ler_conteudo
    self.numero_da_ob = conteudo[28..38]
    self.codigo_da_operacao = conteudo[51..52]
    self.valor_liquido = conteudo[63..79].to_f / 100 rescue 0
    self.codigo_do_banco = conteudo[80..82]
    self.agencia_do_favorecido = conteudo[83..86].to_s.strip
    self.conta_bancaria_do_favorecido = conteudo[88..97].to_s.strip
    self.nome_do_favorecido = conteudo[98..142].to_s.strip
    self.tipo_de_pagamento = conteudo[303].to_s
    self.documento_do_favorecido = conteudo[305..318].to_s.strip
    self.agencia = conteudo[319..323].to_s.strip
    self.conta_bancaria = conteudo[324..333].to_s.strip
    self.codigo_de_retorno = conteudo[341..342]

    self.pagamento_do_lote_bancario = Contabilidade::PagamentoDoLoteBancario.where(numero: self.numero_da_ob.gsub("OB", "").to_i).first 
  end

  def processar_pagamento
    if self.numero_da_ob.present? && !retorno_bancario.recusada? && self.pagamento_do_lote_bancario.present? && (self.codigo_de_retorno.to_i == 1 || self.codigo_de_retorno.to_i == 0)
      self.pagamento_do_lote_bancario.conta_bancaria_por_pagamento.pagamento.update_column(:status, :confirmado_por_lote_bancario) if self.pagamento_do_lote_bancario.conta_bancaria_por_pagamento.present?
    end
  end
  
  def tipo_de_pagamento_descricao
    if self.tipo_de_pagamento == "0"
      "0 - Não prioritário"
    else
      "1 - Prioritário"
    end
  end

  def codigo_da_operacao_descricao
    case self.codigo_da_operacao
    when "31"
      "31 - Transferência de recursos para conta de terceiros em outros bancos"
    when "32"
      "32 - Transferência de recursos para conta de terceiros no Banco"
    when "33"
      "33 - Transferência de recursos para agência da Unidade Gestora para efetuar serviços de pagamentos diversos (água, luz, telefone, etc.)"
    when "34"
      "34 - Transferência recursos entre contas de mesma titularidade com float zero"
    when "35"
      "35 - Transfere recursos para pagamento para beneficiários sem qualquer domicílio bancário, para liquidação no caixa (abaixo do limite)"
    when "36"
      "36 - Transfere recursos para pagamento a não correntistas (acima do valor limite) - não consta na RE"
    when  "37"
      "37 - Transfere recursos para pagamento para beneficiários sem qualquer domicílio bancário, para liquidação no caixa (acima do limite)"
    when "38"
      "38 - Pagamento de Títulos e Convênios com código de barra"
    when "39"
      "39 - Pagamento de Convênios sem código de barra"
    else
      "Transfere recursos da conta da Unidade Gestora para a conta única do cliente (não existe para convênios)"
    end
  end

  def codigo_de_retorno_descricao
    if self.codigo_de_retorno == 1
      "01 - Ordem Bancária paga corretamente"
    end
  end

end
