# frozen_string_literal: true
class RecruiterController < ApplicationController
  before_action :authorize_recruiter, except: [:login, :auth]
  before_action :collect_quizzes, except: [:login, :auth]

  def index
    @candidates = current_recruiter.candidates
  end

  def new
    @candidate = Candidate.new
    render :new
  end

  def create
    @candidate = Candidate.create(candidate_params.merge(recruiter_id: current_recruiter.id))

    if @candidate.persisted?
      CandidateMailer.welcome(@candidate).deliver_later
      RecruiterMailer.candidate_created(@candidate).deliver_later
      redirect_to recruiter_path, flash: { success: "Sucessfully created candidate #{@candidate.name}" }
    else
      flash[:error] = "Failed to save candidate."
      render :new
    end
  end

  def edit
    @candidate = Candidate.find_by(id: params[:id])
  end

  def update
    @candidate = Candidate.find_by(id: params[:id])
    @candidate.update(candidate_params)

    if @candidate.save
      redirect_to recruiter_path, flash: { success: "#{@candidate.name} updated!" }
    else
      flash[:error] = "Failed to save candidate."
      render :edit
    end
  end

  def login
    redirect_to recruiter_path unless current_recruiter.nil?
  end

  def auth
    recruiter = User.find_by(email: auth_params[:email], role: %w(admin recruiter))

    if recruiter && recruiter.authenticate(auth_params[:password])
      session[:user] = recruiter.to_i
      redirect_to recruiter_path
    else
      redirect_to recruiter_login_path,
                  flash: { error: "Sorry, incorrect email or password. Please try again." }
    end
  end

  def logout
    reset_session
    redirect_to recruiter_login_path
  end

  def resend_welcome
    candidate = Candidate.find_by(id: params[:id])
    CandidateMailer.welcome(candidate).deliver_later
    render json: { message: "Email queued!" }.to_json
  end

  private

    def candidate_params
      params.require(:candidate).permit(:name, :email, :experience, :quiz_id)
    end

    def collect_quizzes
      @quizzes ||= Quiz.order(:name)
    end
end
