class ApplicationController < ActionController::Base
  include Pundit::Authorization

  rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized

  before_action :configure_permitted_parameters, if: :devise_controller?
  prepend_before_action :load_tenant_data

  protected

    def configure_permitted_parameters
      additional_permitted_parameters = [:full_name, :notifications_enabled]

      devise_parameter_sanitizer.permit(:sign_up, keys: additional_permitted_parameters)
      devise_parameter_sanitizer.permit(:account_update, keys: additional_permitted_parameters)
    end

    def load_tenant_data
      if Rails.application.multi_tenancy?
        return if request.subdomain.blank? or RESERVED_SUBDOMAINS.include?(request.subdomain)

        # Load the current tenant based on subdomain
        current_tenant = Tenant.find_by(subdomain: request.subdomain)

        if current_tenant.status == "pending" and controller_name != "confirmation" and action_name != "show"
          redirect_to pending_tenant_path; return
        end

        if current_tenant.status == "blocked"
          redirect_to blocked_tenant_path; return
        end

        redirect_to showcase_url unless current_tenant
      else
        # Load the one and only tenant
        current_tenant = Tenant.first
      end

      return unless current_tenant
      Current.tenant = current_tenant

      # Load tenant data
      @tenant = Current.tenant_or_raise!
      @boards = Board.select(:id, :name).order(order: :asc)

      # Setup locale
      I18n.locale = @tenant.locale
    end

  private

    def user_not_authorized
      render json: {
        error: t('backend.errors.unauthorized')
      }, status: :unauthorized
    end
end
