# frozen_string_literal: true
class CandidateController < ApplicationController
  before_action :authorize_candidate, except: [:login, :validate, :live_coder]
  before_action :send_to_oops, only: [:login]

  def login
    login_candidate
    redirect_to :thankyou and return if current_candidate && current_candidate.completed?
    redirect_to :welcome if current_candidate

    flash[:error] = "Sorry, incorrect test id" if params[:test_hash].present?
  end

  def welcome
    render :welcome_back if current_candidate.answers.count.positive?
  end

  def saved
  end

  def oops
  end

  def thankyou
    redirect_to root_path if session[:test_id].nil?
    reset_session
  end

  def validate
    candidate = Candidate.find_by(test_hash: params['test_id'])
    redirect_to(root_path, flash: { error: "Sorry, incorrect test id" }) and return if candidate.nil?

    session[:test_id] = candidate.test_hash
    redirect_to :thankyou and return if candidate.completed?
    redirect_to :welcome
  end

  private

    def login_candidate
      candidate = Candidate.find_by(test_hash: params['test_id'])
      return false if candidate.nil?

      session[:test_id] = candidate.test_hash
    end

    def send_to_oops
      redirect_to welcome_path and return if current_candidate && current_candidate.stale?
      redirect_to oops_path if current_candidate
    end
end
