class Draft < ActiveRecord::Base
  NEW_TOPIC = 'new_topic'
  NEW_PRIVATE_MESSAGE = 'new_private_message'
  EXISTING_TOPIC = 'topic_'

  def self.set(user, key, sequence, data)
    d = find_draft(user,key)
    if d
      return if d.sequence > sequence
      exec_sql("UPDATE drafts
               SET  data = :data,
                    sequence = :sequence,
                    revisions = revisions + 1
               WHERE id = :id", id: d.id, sequence: sequence, data: data)
    else
      Draft.create!(user_id: user.id, draft_key: key, data: data, sequence: sequence)
    end
  end

  def self.get(user, key, sequence)
    d = find_draft(user,key)
    if d && d.sequence == sequence
      d.data
    end
  end

  def self.clear(user, key, sequence)
    d = find_draft(user,key)
    if d && d.sequence <= sequence
      d.destroy
    end
  end

  def self.find_draft(user, key)
    if user.is_a?(User)
      find_by(user_id: user.id, draft_key: key)
    else
      find_by(user_id: user, draft_key: key)
    end
  end

  def self.cleanup!
    exec_sql("DELETE FROM drafts where sequence < (
               SELECT max(s.sequence) from draft_sequences s
               WHERE s.draft_key = drafts.draft_key AND
                     s.user_id = drafts.user_id
            )")

    # remove old drafts
    delete_drafts_older_than_n_days = SiteSetting.delete_drafts_older_than_n_days.days.ago
    Draft.where("updated_at < ?", delete_drafts_older_than_n_days).destroy_all
  end

end

# == Schema Information
#
# Table name: drafts
#
#  id         :integer          not null, primary key
#  user_id    :integer          not null
#  draft_key  :string           not null
#  data       :text             not null
#  created_at :datetime         not null
#  updated_at :datetime         not null
#  sequence   :integer          default(0), not null
#  revisions  :integer          default(1), not null
#
# Indexes
#
#  index_drafts_on_user_id_and_draft_key  (user_id,draft_key)
#