services:
    notification_manager:
        class: phpbb\notification\manager
        arguments:
            - '@notification.type_collection'
            - '@notification.method_collection'
            - '@service_container'
            - '@user_loader'
            - '@dispatcher'
            - '@dbal.conn'
            - '@cache'
            - '@language'
            - '@user'
            - '%tables.notification_types%'
            - '%tables.user_notifications%'

# ----- Notification's types -----
# Service MUST NOT be shared for all the plugins to work.
    notification.type_collection:
        class: phpbb\di\service_collection
        arguments:
            - '@service_container'
        tags:
            - { name: service_collection, tag: notification.type }

    notification.type.base:
        abstract: true
        arguments:
            - '@dbal.conn'
            - '@language'
            - '@user'
            - '@auth'
            - '%core.root_path%'
            - '%core.php_ext%'
            - '%tables.user_notifications%'

    notification.type.admin_activate_user:
        class: phpbb\notification\type\admin_activate_user
        shared: false
        parent: notification.type.base
        calls:
            - [set_user_loader, ['@user_loader']]
            - [set_config, ['@config']]
        tags:
            - { name: notification.type }

    notification.type.approve_post:
        class: phpbb\notification\type\approve_post
        shared: false
        parent: notification.type.post
        tags:
            - { name: notification.type }

    notification.type.approve_topic:
        class: phpbb\notification\type\approve_topic
        shared: false
        parent: notification.type.topic
        tags:
            - { name: notification.type }

    notification.type.bookmark:
        class: phpbb\notification\type\bookmark
        shared: false
        parent: notification.type.post
        tags:
            - { name: notification.type }

    notification.type.disapprove_post:
        class: phpbb\notification\type\disapprove_post
        shared: false
        parent: notification.type.post
        tags:
            - { name: notification.type }

    notification.type.disapprove_topic:
        class: phpbb\notification\type\disapprove_topic
        shared: false
        parent: notification.type.topic
        tags:
            - { name: notification.type }

    notification.type.group_request:
        class: phpbb\notification\type\group_request
        shared: false
        parent: notification.type.base
        calls:
            - [set_user_loader, ['@user_loader']]
        tags:
            - { name: notification.type }

    notification.type.group_request_approved:
        class: phpbb\notification\type\group_request_approved
        shared: false
        parent: notification.type.base
        tags:
            - { name: notification.type }

    notification.type.pm:
        class: phpbb\notification\type\pm
        shared: false
        parent: notification.type.base
        calls:
            - [set_user_loader, ['@user_loader']]
            - [set_config, ['@config']]
        tags:
            - { name: notification.type }

    notification.type.post:
        class: phpbb\notification\type\post
        shared: false
        parent: notification.type.base
        calls:
            - [set_user_loader, ['@user_loader']]
            - [set_config, ['@config']]
        tags:
            - { name: notification.type }

    notification.type.post_in_queue:
        class: phpbb\notification\type\post_in_queue
        shared: false
        parent: notification.type.post
        tags:
            - { name: notification.type }

    notification.type.quote:
        class: phpbb\notification\type\quote
        shared: false
        parent: notification.type.post
        calls:
            - [set_utils, ['@text_formatter.utils']]
        tags:
            - { name: notification.type }

    notification.type.report_pm:
        class: phpbb\notification\type\report_pm
        shared: false
        parent: notification.type.pm
        tags:
            - { name: notification.type }

    notification.type.report_pm_closed:
        class: phpbb\notification\type\report_pm_closed
        shared: false
        parent: notification.type.pm
        tags:
            - { name: notification.type }

    notification.type.report_post:
        class: phpbb\notification\type\report_post
        shared: false
        parent: notification.type.post
        tags:
            - { name: notification.type }

    notification.type.report_post_closed:
        class: phpbb\notification\type\report_post_closed
        shared: false
        parent: notification.type.post
        tags:
            - { name: notification.type }

    notification.type.topic:
        class: phpbb\notification\type\topic
        shared: false
        parent: notification.type.base
        calls:
            - [set_user_loader, ['@user_loader']]
            - [set_config, ['@config']]
        tags:
            - { name: notification.type }

    notification.type.topic_in_queue:
        class: phpbb\notification\type\topic_in_queue
        shared: false
        parent: notification.type.topic
        tags:
            - { name: notification.type }

    notification.type.forum:
        class: phpbb\notification\type\forum
        shared: false
        parent: notification.type.post
        calls:
            - [set_user_loader, ['@user_loader']]
            - [set_config, ['@config']]
        tags:
            - { name: notification.type }

# ----- Notification's methods -----
# Service MUST NOT be shared for all the plugins to work.
    notification.method_collection:
        class: phpbb\di\service_collection
        arguments:
            - '@service_container'
        tags:
            - { name: service_collection, tag: notification.method }

    notification.method.board:
        class: phpbb\notification\method\board
        shared: false
        arguments:
            - '@user_loader'
            - '@dbal.conn'
            - '@cache.driver'
            - '@user'
            - '@config'
            - '%tables.notification_types%'
            - '%tables.notifications%'
        tags:
            - { name: notification.method }

    notification.method.email:
        class: phpbb\notification\method\email
        shared: false
        arguments:
            - '@user_loader'
            - '@user'
            - '@config'
            - '@dbal.conn'
            - '%core.root_path%'
            - '%core.php_ext%'
            - '%tables.notification_emails%'
        tags:
            - { name: notification.method }

    notification.method.jabber:
        class: phpbb\notification\method\jabber
        shared: false
        arguments:
            - '@user_loader'
            - '@user'
            - '@config'
            - '%core.root_path%'
            - '%core.php_ext%'
        tags:
            - { name: notification.method }
