class Licitacao::Etp < ApplicationRecord
  
  attr_accessor :acao_gerencial
  belongs_to :unidade_orcamentaria, class_name: 'Loa::UnidadeOrcamentaria'
  belongs_to :responsavel, class_name: 'Base::Pessoa', foreign_key: 'responsavel_id'
  belongs_to :pedido, class_name: 'Licitacao::Pedido', foreign_key: 'pedido_id'
  
  has_many :acoes_do_etp, class_name: 'Licitacao::AcaoDoEtp', dependent: :destroy
  has_many :acoes, through: :acoes_do_etp, source: :acao , dependent: :destroy
  has_many :documentos_do_etp, class_name: "Licitacao::DocumentoDoEtp", dependent: :destroy
  has_many :solucoes_do_etp, class_name: "Licitacao::SolucaoDoEtp", dependent: :destroy
  has_many :impactos_ambientais_do_etp, class_name: 'Licitacao::ImpactoAmbientalDoEtp', foreign_key: 'etp_id', dependent: :destroy
  has_many :medidas_mitigatoras_do_etp, class_name: 'Licitacao::MedidaMitigadoraDoEtp', foreign_key: 'etp_id' , dependent: :destroy
  has_many :unidades_orcamentarias_por_etp, class_name: 'Licitacao::UnidadeOrcamentariaPorEtp', dependent: :destroy
  has_many :unidades_orcamentarias, :through => :unidades_orcamentarias_por_etp , dependent: :destroy
  has_many :pedidos, class_name: "Licitacao::Pedido", dependent: :destroy
  
  accepts_nested_attributes_for :unidades_orcamentarias_por_etp, reject_if: :all_blank, allow_destroy: true
  accepts_nested_attributes_for :acoes_do_etp
  
  after_create :atribui_numero_estudo
  after_create :cria_unidade_orcamentaria_por_etp
  after_update :adiciona_status
  
  enum status: {
		aberto: 0,
		em_estudo: 1,
		fechado: 2,
    em_execucao: 3
	}
  
  def atribui_numero_estudo
    return if numero_estudo.present?
    self.numero_estudo = "#{created_at.day.to_s.rjust(2, '0')}#{created_at.month.to_s.rjust(2, '0')}#{self.class.proximo_sequencial}"
    update_column(:numero_estudo, numero_estudo)
    update_column(:status, 'aberto')
  end
  
  def cria_unidade_orcamentaria_por_etp
    unidade_orcamentaria_por_etp = Licitacao::UnidadeOrcamentariaPorEtp.new(
      etp_id: self.id,
      unidade_orcamentaria_id: self.unidade_orcamentaria_id,
      responsavel_do_etp_id: self.responsavel_id
    )
    unidade_orcamentaria_por_etp.save(validate: false)
  end
  
  def self.proximo_sequencial
    proximo = self.maximum(:numero_estudo).to_s.last(4).to_i + 1
    proximo.to_s.rjust(4, '0')
  end
  
  def adiciona_status
    return if ['fechado'].include?(self.status)
    
    if self.solucoes_do_etp.blank?
      self.update_column(:status, 'aberto')
    elsif self.solucoes_do_etp.present?
      self.update_column(:status, 'em_estudo')
    end
  end

  def remove_unidade_e_seus_itens(unidade_por_etp_id)
		Licitacao::UnidadeOrcamentariaPorEtp.find(unidade_por_etp_id).destroy
	end
end 