class Candidate < ApplicationRecord
  belongs_to :quiz
  has_many :questions, -> { order("sort") }, through: :quiz
  has_many :answers
  belongs_to :recruiter, class_name: "User"

  before_create :generate_test_hash

  validates_presence_of :recruiter_id
  validates_presence_of :test_hash
  validates_uniqueness_of :test_hash

  def submitted_answers
    answers.where(submitted: true)
  end

  def answered_questions
    answers.where.not(answer: nil)
  end

  def fetch_question qid
    CandidateQuiz.new(id).fetch_question(qid).first
  end

  def my_quiz
    CandidateQuiz.new(id).build_my_quiz
  end

  private

    def generate_test_hash
      loop do
        self[:test_hash] = SecureRandom.urlsafe_base64(8)

        break unless Candidate.exists?(test_hash: self[:test_hash])
      end
    end
end
