class LearningObjectPolicy < ApplicationPolicy
  include SociablePolicy
  include ReportablePolicy
  include TaggablePolicy
  include SubjectablePolicy
  include StageablePolicy
  include SubmissionPolicy

  class Scope < Scope
    def resolve
      if user.nil?
        scope.where(state: 'published')
      elsif user_can_edit?
        scope.all
      else
        scope.where(state: 'published')
      end
    end
  end

  def create?
    record if user_exists? && user.is_submitter?
  end

  def update?
    record if owns? && user.is_submitter?
  end

  def publish?
    record if user_can_moderate? && record.submitted?
  end

  def destroy?
    record if owns?
  end

  def destroy_attachment?
    record if owns?
  end

  def remove_thumbnail?
    record if owns?
  end

  def show?
    return record if record.published? || ( !user.nil? && user_can_edit? )
    return record if user == record.publisher
    ## TODO: falta verificar se o +record.publisher+ é uma instituição e +user+ faz parte
    # => return owner.users.include?(user) if owner.is_a?(Institution)  (???)
  end

  def index?
    record
  end

  def add_object?
    record if user_exists?
  end

  def remove_object?
    record if user_exists?
  end

  def owner
    record.publisher
  end

end