# frozen_string_literal: true
class CustomWizard::WizardController < ::ApplicationController
  before_action :ensure_plugin_enabled
  before_action :ensure_logged_in, only: [:skip]

  def show
    if wizard.present?
      render json: CustomWizard::WizardSerializer.new(wizard, scope: guardian, root: false).as_json, status: 200
    else
      render json: { error: I18n.t('wizard.none') }
    end
  end

  def skip
    params.require(:wizard_id)

    if wizard.required && !wizard.completed? && wizard.permitted?
      return render json: { error: I18n.t('wizard.no_skip') }
    end

    result = { success: 'OK' }

    if current_user && wizard.can_access?
      if redirect_to = wizard.current_submission&.redirect_to
        result.merge!(redirect_to: redirect_to)
      end

      wizard.cleanup_on_skip!
    end

    render json: result
  end

  protected

  def wizard
    @wizard ||= begin
      builder = CustomWizard::Builder.new(params[:wizard_id].underscore, current_user)
      return nil unless builder.present?
      opts = {}
      opts[:reset] = params[:reset]
      builder.build(opts, params)
    end
  end

  private

  def ensure_plugin_enabled
    unless SiteSetting.custom_wizard_enabled
      redirect_to path("/")
    end
  end
end