class Theme < ApplicationRecord
  include ThemeHelper

  belongs_to :user

  validates_numericality_of :primary_color, :primary_text,
    :danger_color, :danger_text,
    :success_color, :success_text,
    :warning_color, :warning_text,
    :info_color, :info_text,
    :default_color, :default_text,
    :panel_color, :panel_text,
    :link_color, :background_color,
    :background_text, :background_muted,
    :input_color, :input_text,
    :outline_color,
    greater_than_or_equal_to: 0, less_than_or_equal_to: 0xFFFFFF,
    allow_nil: true, only_integer: true

  has_attached_file :css, use_timestamp: false, s3_headers: {
    'Content-Type' => 'text/css'
  }, fog_file: {
    content_type: 'text/css'
  }
  validates_attachment_content_type :css, content_type: /^text\//

  before_save do
    self.css = nil

    style = StringIO.new(render_theme_with_context(self))

    style.class.class_eval { attr_accessor :original_filename, :content_type }

    style.content_type = 'text/css'
    style.original_filename = 'theme.css'

    self.css = style
  end

  def theme_color
    ('#' + ('0000000' + primary_color.to_s(16))[-6, 6])
  end
end