class BillingSetting < InvoicingRecord
  self.inheritance_column = :_type_disabled

  belongs_to :ctv, optional: true, class_name: 'ProductVat', foreign_key: :ctv_id

  before_save :clean_values

  validates_presence_of :type, :name
  validates_presence_of :code, unless: :tva?
  validates_presence_of :amount, :ttv_id, :ctv_id, :application_date, if: :tva?
  validates_presence_of :ctv_id, if: :product?

  def tva?
    type == 'TVA'
  end

  def product?
    type == 'produit'
  end

  def editable?
    Current.user&.superadmin? || !uneditable?
  end

  def uneditable?
    type.to_s.in?(self.class.uneditable_types)
  end

  def self.uneditable_types
    @uneditable_types ||= %w[TTV CTV TVA ATY RET]
  end

  private

  def clean_values
    self.amount = nil unless tva?
    self.ttv_id = nil unless tva?
    self.ctv_id = nil unless tva? || product?
    self.application_date = nil unless tva?
    self.retribution = nil unless product?
    self.photo = nil unless product?
  end
end
