# frozen_string_literal: true

class ThemeSettingsManager::Upload < ThemeSettingsManager
  def value
    has_record? ? cdn_url(db_record.value) : default
  end

  def default
    upload_id = default_upload_id
    return if upload_id.blank?

    cdn_url(upload_id)
  end

  def value=(new_value)
    if new_value.present?
      if new_value == default
        new_value = default_upload_id
      else
        upload = ::Upload.find_by(url: new_value)
        new_value = upload.id if upload.present?
      end
    end

    super(new_value)
  end

  private

  def cdn_url(upload_id)
    return if upload_id.blank?

    upload = ::Upload.find_by_id(upload_id.to_i)
    return if upload.blank?

    Discourse.store.cdn_url(upload.url)
  end

  def default_upload_id
    theme_field =
      theme.theme_fields.find_by(name: @default, type_id: ThemeField.types[:theme_upload_var])
    return if theme_field.blank?

    theme_field.upload_id
  end
end