services:
  workspaces.manager:
    class: Drupal\workspaces\WorkspaceManager
    arguments: ['@request_stack', '@entity_type.manager', '@entity.memory_cache', '@current_user', '@state', '@logger.channel.workspaces', '@class_resolver']
    tags:
      - { name: service_id_collector, tag: workspace_negotiator }
  workspaces.operation_factory:
    class: Drupal\workspaces\WorkspaceOperationFactory
    arguments: ['@entity_type.manager', '@database']

  workspaces.negotiator.default:
    class: Drupal\workspaces\Negotiator\DefaultWorkspaceNegotiator
    arguments: ['@entity_type.manager']
    tags:
      - { name: workspace_negotiator, priority: 0 }
  workspaces.negotiator.session:
    class: Drupal\workspaces\Negotiator\SessionWorkspaceNegotiator
    arguments: ['@current_user', '@session', '@entity_type.manager']
    tags:
      - { name: workspace_negotiator, priority: 50 }
  workspaces.negotiator.query_parameter:
    class: Drupal\workspaces\Negotiator\QueryParameterWorkspaceNegotiator
    parent: workspaces.negotiator.session
    tags:
      - { name: workspace_negotiator, priority: 100 }

  cache_context.workspace:
    class: Drupal\workspaces\WorkspaceCacheContext
    arguments: ['@workspaces.manager']
    tags:
      - { name: cache.context }
  logger.channel.workspaces:
    parent: logger.channel_base
    arguments: ['workspaces']

  workspaces.entity.query.sql:
    decorates: entity.query.sql
    class: Drupal\workspaces\EntityQuery\QueryFactory
    arguments: ['@database', '@workspaces.manager']
    public: false
    decoration_priority: 50
    tags:
      - { name: backend_overridable }
  pgsql.workspaces.entity.query.sql:
    decorates: pgsql.entity.query.sql
    class: Drupal\workspaces\EntityQuery\PgsqlQueryFactory
    arguments: ['@database', '@workspaces.manager']
    public: false
    decoration_priority: 50
