services:
  builderius_release.model.builderius_release_tag_taxonomy:
    class: Builderius\Bundle\ReleaseBundle\Registration\BuilderiusReleaseTagTaxonomy
    tags:
      - { name: wp_taxonomy }

  builderius_release.model.builderius_release_post_type:
    class: Builderius\Bundle\ReleaseBundle\Registration\BulderiusReleasePostType
    tags:
      - { name: wp_post_type }

  builderius_release.condition.is_builderius_releases_admin_page:
    class: Builderius\Swoop\Bundle\ConditionBundle\Model\IsRequestHasParameterCondition
    arguments:
      - name: is_builderius_releases_admin_page
        description: 'Condition to check whether the current admin page is Builderius Releases page'
        arguments:
          requestType: 'GET'
          parameter: 'page'
          value: 'builderius-releases'
    calls:
      - ['addDependOnCondition', ['@is_backend']]
    tags:
      - { name: wp_condition }

  builderius_release.page.builderius-releases:
    class: Builderius\Swoop\Bundle\PageBundle\Model\SimplePage
    arguments:
      - 'builderius-releases'
      - 'BuilderiusReleaseBundle:releasesApp.twig'
    calls:
      - [setTemplating, ['@templating']]
    tags:
      - { name: wp_page }

  builderius_release.admin_menu_page.builderius-releases:
    class: Builderius\Swoop\Bundle\MenuBundle\Model\AdminMenuPage
    arguments:
      - page_title: 'Builderius Releases'
        menu_title: 'Releases'
        menu_slug: 'builderius-releases'
        capability: 'manage_options'
        page: 'builderius-releases'
        parent: 'builderius'
        position: 2
        translation_domain: 'builderius'
    calls:
      - [addCondition, ['@user_has_development_capability']]
    tags:
      - { name: wp_admin_menu_page }

  builderius_release.asset.js.admin_releases_index:
    class: Builderius\Swoop\Bundle\AssetBundle\Model\Script
    arguments:
      - category: 'admin'
        handle: 'builderius-admin-releases-index'
        source: 'builderius:admin-releases-index.js'
        dependencies: ['builderius-react-libs', 'wp-api-request']
        version: "@=service('swoop_kernel.provider.plugins_versions').getPluginVersion('builderius')"
        inFooter: true
    calls:
      - [addCondition, ['@is_builderius_releases_admin_page']]
    tags:
      - { name: wp_asset }

  builderius_release.asset.css.admin_releases_index:
    class: Builderius\Swoop\Bundle\AssetBundle\Model\Style
    arguments:
      - category: 'admin'
        handle: 'builderius-admin-releases-index'
        source: 'builderius:admin-releases-index.css'
        version: "@=service('swoop_kernel.provider.plugins_versions').getPluginVersion('builderius')"
    calls:
      - [addCondition, ['@is_builderius_releases_admin_page']]
    tags:
      - { name: wp_asset }

  builderius_release.registration.builderius_user_asset_localization:
    class: Builderius\Bundle\BuilderBundle\Registration\BuilderiusBuilderUserScriptLocalization
    tags:
      - { name: wp_script_localization, handle: builderius-admin-releases-index }

  builderius_release.registration.builderius_releases_asset_localization:
    class: Builderius\Bundle\ReleaseBundle\Registration\BuilderiusReleasesScriptLocalization
    arguments:
      - '@builderius_graphql.executor.builderius_entities_graphql_queries'
    tags:
      - { name: wp_script_localization, handle: builderius-admin-releases-index, priority: 0 }

  builderius_release.factory.builderius_release_from_post:
    class: Builderius\Bundle\ReleaseBundle\Factory\BuilderiusReleaseFromPostFactory
    public: true
    arguments:
      - '@swoop_query.wp_query'
      - '@builderius_deliverable.factory.dsm_from_post'
      - '@builderius.cache.runtime'

  builderius_release.factory.builderius_deliverable_release_from_post:
    class: Builderius\Bundle\ReleaseBundle\Factory\BuilderiusDeliverableReleaseFromPostFactory
    arguments:
      - '@builderius_release.factory.builderius_release_from_post'

  builderius_release.provider.release:
    class: Builderius\Bundle\ReleaseBundle\Provider\BuilderiusDeliverableReleaseProvider
    arguments:
      - '@swoop_query.wp_query'
      - '@builderius_release.factory.builderius_release_from_post'
      - '@builderius.cache.runtime'
    tags:
      - { name: builderius_deliverable_provider, priority: 10 }

  builderius_release.registration.builderius_releases_quantity_asset_localization:
    class: Builderius\Bundle\ReleaseBundle\Registration\BuilderiusReleasesQuantityScriptLocalization
    arguments:
      - '@builderius_graphql.executor.builderius_entities_graphql_queries'
    tags:
      - { name: wp_script_localization, handle: builderius-admin-home-index, priority: 0 }

  builderius_release.registration.builderius_published_releaseexists_asset_localization:
    class: Builderius\Bundle\ReleaseBundle\Registration\BuilderiusPublishedReleaseExistsScriptLocalization
    arguments:
      - '@builderius_graphql.executor.builderius_entities_graphql_queries'
    tags:
      - { name: wp_script_localization, handle: builderius-admin-home-index, priority: 0 }

  builderius_release.event_listener.builderius_global_type_settings_transformation_on_release_import:
    class: Builderius\Bundle\ReleaseBundle\EventListener\BuilderiusGlobalTypeSettingsTransformationBeforeReleaseImportListener
    arguments:
      - '@builderius_template.provider.template_types'
      - '@builderius_setting.registry.settings'
    #tags:
    #  - { name: swoop_event_listener, event: builderius_release_config_before_import, method: beforeImport }

  builderius_release.event_listener.clear_published_release_cache:
    class: Builderius\Bundle\ReleaseBundle\EventListener\ClearPublishedReleaseCacheEventListener
    arguments:
      - '@builderius.cache.persistent'
    tags:
      - { name: swoop_event_listener, event: builderius_release_unpublished, method: deleteCache }
      - { name: swoop_event_listener, event: builderius_release_before_publish, method: deleteCache }
      - { name: swoop_event_listener, event: builderius_commit_autopublish, method: deleteCache }

  builderius_release.event_listener.autopublished_commits_clear_on_release_delete:
    class: Builderius\Bundle\ReleaseBundle\EventListener\AutopublishedCommitsClearOnAutogeneratedReleaseDeleteEventListener
    arguments:
      - '@swoop_query.wp_query'
    tags:
      - { name: swoop_event_listener, event: builderius_release_deleted, method: onReleaseDelete }

  builderius_release.event_listener.commit_autopublish:
    class: Builderius\Bundle\ReleaseBundle\EventListener\CommitAutopublishEventListener
    arguments:
      - '@event_dispatcher'
      - '@swoop_query.wp_query'
      - '@builderius_graphql.field_resolver.builderius_root_mutation.publish_release'
      - '@builderius_release.factory.builderius_release_from_post'
      - '@builderius_component.provider.components'
      - '@builderius.cache.runtime'
    tags:
      - { name: swoop_event_listener, event: builderius_commit_autopublish, method: onCommitAutopublish }

  builderius_release.event_listener.css_files_deletion_on_release_unpublishing:
    class: Builderius\Bundle\ReleaseBundle\EventListener\CssFilesDeletionOnReleaseUnpublishingListener
    tags:
      - { name: swoop_event_listener, event: builderius_release_unpublished, method: onReleaseUnpublish }

  builderius_release.hook.attachment_folder_change_for_release_archives:
    class: Builderius\Bundle\ReleaseBundle\Hook\AttachmentFolderChangeForReleaseArchivesHook
    arguments:
      - tag: wp_handle_upload_prefilter
    tags:
      - { name: wp_hook }

  builderius_release.hook.delete_published_release_cache_on_clean_post_cache:
    class: Builderius\Bundle\ReleaseBundle\Hook\ClearPublishedReleaseCacheOnCleanPostCacheHook
    arguments:
      - tag: 'clean_post_cache'
        accepted_args: 2
    calls:
      - [ 'setPersistentCache', [ '@builderius.cache.persistent' ] ]
    tags:
      - { name: wp_hook }

  builderius_release.hook.delete_published_release_cache_on_clean_term_cache:
    class: Builderius\Bundle\ReleaseBundle\Hook\ClearPublishedReleaseCacheOnCleanTermCacheHook
    arguments:
      - tag: 'clean_term_cache'
    calls:
      - [ 'setPersistentCache', [ '@builderius.cache.persistent' ] ]
    tags:
      - { name: wp_hook }

  builderius_release.hook.delete_published_release_cache_on_post_meta_update:
    class: Builderius\Bundle\ReleaseBundle\Hook\ClearPublishedReleaseCacheOnMetaUpdateHook
    arguments:
      - tag: 'updated_post_meta'
        accepted_args: 2
    calls:
      - [ 'setPersistentCache', [ '@builderius.cache.persistent' ] ]
    tags:
      - { name: wp_hook }

  builderius_release.hook.delete_published_release_cache_on_comment_meta_update:
    class: Builderius\Bundle\ReleaseBundle\Hook\ClearPublishedReleaseCacheOnMetaUpdateHook
    arguments:
      - tag: 'updated_comment_meta'
        accepted_args: 2
    calls:
      - [ 'setPersistentCache', [ '@builderius.cache.persistent' ] ]
    tags:
      - { name: wp_hook }

  builderius_release.hook.delete_published_release_cache_on_term_meta_update:
    class: Builderius\Bundle\ReleaseBundle\Hook\ClearPublishedReleaseCacheOnMetaUpdateHook
    arguments:
      - tag: 'updated_term_meta'
        accepted_args: 2
    calls:
      - [ 'setPersistentCache', [ '@builderius.cache.persistent' ] ]
    tags:
      - { name: wp_hook }

  builderius_release.hook.delete_published_release_cache_on_user_meta_update:
    class: Builderius\Bundle\ReleaseBundle\Hook\ClearPublishedReleaseCacheOnMetaUpdateHook
    arguments:
      - tag: 'updated_user_meta'
        accepted_args: 2
    calls:
      - [ 'setPersistentCache', [ '@builderius.cache.persistent' ] ]
    tags:
      - { name: wp_hook }

  builderius_release.hook.delete_published_release_cache_on_option_added:
    class: Builderius\Bundle\ReleaseBundle\Hook\ClearPublishedReleaseCacheOnOptionUpdateHook
    arguments:
      - tag: 'added_option'
        accepted_args: 1
    calls:
      - [ 'setPersistentCache', [ '@builderius.cache.persistent' ] ]
    tags:
      - { name: wp_hook }

  builderius_release.hook.delete_published_release_cache_on_option_updated:
    class: Builderius\Bundle\ReleaseBundle\Hook\ClearPublishedReleaseCacheOnOptionUpdateHook
    arguments:
      - tag: 'updated_option'
        accepted_args: 1
    calls:
      - [ 'setPersistentCache', [ '@builderius.cache.persistent' ] ]
    tags:
      - { name: wp_hook }

  builderius_release.hook.delete_published_release_cache_on_option_deleted:
    class: Builderius\Bundle\ReleaseBundle\Hook\ClearPublishedReleaseCacheOnOptionUpdateHook
    arguments:
      - tag: 'deleted_option'
        accepted_args: 1
    calls:
      - ['setPersistentCache', ['@builderius.cache.persistent']]
    tags:
      - { name: wp_hook }

  builderius_release.hook.admin_releases_index_sctipt_translations_load:
    class: Builderius\Bundle\ReleaseBundle\Hook\AdminReleasesIndexScriptTranslationsLoadHook
    arguments:
      - tag: 'admin_enqueue_scripts'
        priority: 20
    calls:
      - [addCondition, ['@is_builderius_releases_admin_page']]
    tags:
      - { name: wp_hook }

  builderius_release.hook.admin_releases_index_sctipt_translations_file_path_change:
    class: Builderius\Bundle\ReleaseBundle\Hook\AdminReleasesIndexScriptTranslationsFilePathChangeHook
    arguments:
      - tag: 'load_script_translation_file'
        accepted_args: 3
    calls:
      - [addCondition, ['@is_builderius_releases_admin_page']]
    tags:
      - { name: wp_hook }

  builderius_release.rest_api.endpoint.release_cache_clear:
    class: Builderius\Bundle\ReleaseBundle\RestApi\Endpoint\ReleaseCacheClearEndpoint
    arguments:
      - '@builderius.cache.persistent'
    public: true
    tags:
      - { name: wp_rest_endpoint }
