class Translation < ActiveRecord::Base
  belongs_to :phrase

  validates :phrase, presence: true, unless: :new_record?

  scope :by_locale, ->(*locale) { where(locale: (locale.nil? || locale.compact.join.empty?) ? I18n.locale : locale) }
  scope :with_phrase_containers, -> { joins(phrase: :phrase_containers) }
  scope :for, ->(translatable, attribute_name) do
    with_phrase_containers.merge(PhraseContainer.for(translatable, attribute_name))
  end

  scope :localed, ->(*locale) do
    if locale.nil?
      locale = [I18n.locale.to_s]
    elsif locale.is_a? Array
      locale = locale.compact.join.empty? ? [I18n.locale.to_s] : locale.compact.map(&:to_s)
    else
      locale = [locale.to_s]
    end
    ordered_locales = locale + (locales - locale)
    order(ordered_locales.map { |l| "`translations`.`locale` = '#{l}' DESC" }.join(', '))
  end

  scope :not_blank, -> { where.not(text: [nil, '']) }

end