class SubscriptionsController < ApplicationController
  before_action :set_user
  around_action :set_user_locale
  skip_authorization_check

  def edit
  end

  def update
    @user.update!(subscriptions_params)
    redirect_to edit_subscriptions_path(token: @user.subscriptions_token),
                notice: t("flash.actions.save_changes.notice")
  end

  private

    def set_user
      @user = if params[:token].present?
                User.find_by!(subscriptions_token: params[:token])
              else
                current_user || raise(CanCan::AccessDenied)
              end
    end

    def subscriptions_params
      params.require(:user).permit(allowed_params)
    end

    def allowed_params
      [:email_on_comment, :email_on_comment_reply, :email_on_direct_message, :email_digest, :newsletter]
    end

    def set_user_locale(&action)
      if params[:locale].blank?
        session[:locale] = find_locale.to_s
      end
      I18n.with_locale(session[:locale], &action)
    end

    def find_locale
      Setting.enabled_locales.find { |locale| locale == @user.locale&.to_sym } || I18n.locale
    end
end
