class Licitacao::ItemDoApostilamento < ApplicationRecord
    has_paper_trail
    attr_accessor :preco_unitario_original
    attr_accessor :valor_atualizado
    attr_accessor :quantidade_no_contrato
    attr_accessor :saldo_atualizado

    belongs_to :item_do_contrato, class_name: 'Licitacao::ItemDoContrato'
    belongs_to :apostilamento, class_name: 'Licitacao::Apostilamento'

    validates_presence_of :item_do_contrato_id
    validates_presence_of :quantidade, if: Proc.new { self.preco_unitario.present? }

    validate :valida_quantidade_maior_que_a_do_contrato, if: Proc.new { self.quantidade.present? && self.item_do_contrato.present? }

    after_initialize :define_attributes_accessors

    def define_attributes_accessors
        self.quantidade_no_contrato = item_do_contrato.try(:quantidade_total).to_d
    end

    def preco_unitario_original
        apostilamento.acrescimo? ? preco_unitario_permitido - preco_unitario : preco_unitario_permitido + preco_unitario
    end

    def preco_unitario_permitido
        return item_do_contrato.try(:valor_unitario).to_d
    end

    def valida_quantidade_maior_que_a_do_contrato
        if quantidade > item_do_contrato.try(:quantidade).to_f
            errors.add(:quantidade, "Não pode ser maior que quantidade disponível no contrato")
        end
    end

    def preco_unitario_valor_do_reajuste
        if apostilamento.acrescimo?
            return preco_unitario.to_d + preco_unitario_original.to_d
        else
            return preco_unitario_original.to_d - preco_unitario.to_d
        end
    end

    def saldo_para_calculos
        return quantidade.to_d * preco_unitario.to_d
    end

    def saldo_somando_com_o_contrato
        return quantidade.to_d * preco_unitario_valor_do_reajuste.to_d
    end
end
