# frozen_string_literal: true

class ApplicationPolicy
  attr_reader :user, :record

  def initialize(user, record)
    @user = user
    @record = record
  end

  def index?
    user_is_admin
  end

  def show?
    user_is_admin
  end

  def create? = false

  def new?
    create?
  end

  def update?
    false
  end

  def edit?
    update?
  end

  def destroy?
    false
  end

  class Scope
    def initialize(user, scope)
      @user = user
      @scope = scope
    end

    def resolve
      raise NoMethodError, "You must define #resolve in #{self.class}"
    end

    private

    attr_reader :user, :scope
  end

  def user_is_admin
    user&.admin?
  end

  def user_can_warehouse
    user&.can_warehouse? || user_is_admin
  end

  def record_belongs_to_user
    user && record&.user == user
  end
end
