class Hack < ApplicationRecord
  # status: 0 未发布; 1已发布
  # diffcult: 难度 1:简单;2:中等; 3:困难
  # 编程题
  validates_length_of :name, maximum: 60
  validates :description, presence: { message: "描述不能为空" }
  validates :name, presence: { message: "名称不能为空" }
  # 测试集
  has_many :hack_sets, ->{order("position asc")}, :dependent => :destroy
  # 代码
  has_many :hack_codes, :dependent => :destroy
  has_many :hack_user_lastest_codes, :dependent => :destroy
  has_many :discusses, as: :dis, dependent: :destroy
  # 点赞
  has_many :praise_treads, as: :praise_tread_object, dependent: :destroy
  # 消息
  has_many :tidings, as: :container, dependent: :destroy

  belongs_to :user

  scope :published, -> { where(status: 1) }
  scope :unpublish, -> { where(status: 0) }
  scope :opening, -> {where(open_or_not: 1)}
  scope :mine, -> (author_id){ where(user_id: author_id) }

  def language
    if hack_codes.count == 1
      hack_codes.first.language
    else
      hack_codes.pluck(:language).first
    end
  end

  def code
    if hack_codes.count == 1
      #tran_base64_decode64(hack_codes.first.code)
      hack_codes.first.code
    else
      #tran_base64_decode64(hack_codes.pluck(:code))
      hack_codes.pluck(:code)
    end
  end

  # 用于用户调试的第一个测试用例
  def input_test_case
    hack_sets.first&.input
  end

  # 管理员
  def manager?(user)
    user_id == user.id || user.admin_or_business?
  end

end