services:
  builderius_component.model.builderius_component_post_type:
    class: Builderius\Bundle\ComponentBundle\Registration\BuilderiusComponentPostType
    tags:
      - { name: wp_post_type }

  builderius_component.factory.builderius_component_from_post:
    class: Builderius\Bundle\ComponentBundle\Factory\BuilderiusComponentFromPostFactory
    public: true
    arguments:
      - '@swoop_query.wp_query'
      - '@builderius_vcs.factory.builderius_branch_from_post'
      - '@builderius.cache.runtime'

  builderius_component.factory.builderius_component_from_post_id:
    class: Builderius\Bundle\ComponentBundle\Factory\BuilderiusComponentFromPostIdFactory
    public: true
    arguments:
      - '@swoop_query.wp_query'
      - '@builderius_component.factory.builderius_component_from_post'

  builderius_component.factory.builderius_vcs_owner_component_from_post:
    class: Builderius\Bundle\ComponentBundle\Factory\BuilderiusVCSOwnerComponentFromPostFactory
    arguments:
      - '@builderius_component.factory.builderius_component_from_post'

  builderius_component.event_listener.builderius_component_creation_on_deliverable_extraction:
    class: Builderius\Bundle\ComponentBundle\EventListener\BuilderiusComponentCreationOnDeliverableExtractListener
    arguments:
      - '@event_dispatcher'
    tags:
      - { name: swoop_event_listener, event: builderius_deliverable_extraction, method: onDeliverableExtraction, priority: 75 }

  builderius_component.event_listener.builderius_component_dsm_post_creation:
    class: Builderius\Bundle\ComponentBundle\EventListener\BuilderiusComponentDSMPostCreationEventListener
    tags:
      - { name: swoop_event_listener, event: builderius_dsm_post_creation, method: onDSMPostCreation }

  builderius_component.event_listener.builderius_components_delete_before_deliverable_extraction:
    class: Builderius\Bundle\ComponentBundle\EventListener\BuilderiusComponentsDeleteBeforeDeliverableExtractListener
    arguments:
      - '@swoop_query.wp_query'
    tags:
      - { name: swoop_event_listener, event: builderius_deliverable_before_extraction, method: beforeDeliverableExtraction }

  builderius_component.event_listener.builderius_component_vcs_owner_from_post_creation:
    class: Builderius\Bundle\ComponentBundle\EventListener\BuilderiusComponentVCSOwnerFromPostCreationEventListener
    arguments:
      - '@builderius_component.factory.builderius_component_from_post'
    tags:
      - { name: swoop_event_listener, event: builderius_vcs_owner_from_post_creation, method: createOwner }

  builderius_component.event_listener.builderius_component_vcs_owners_resolve:
    class: Builderius\Bundle\ComponentBundle\EventListener\BuilderiusComponentVCSOwnersResolveEventListener
    arguments:
      - '@builderius_component.graphql_field_resolver.builderius_root_query.components'
    tags:
      - { name: swoop_event_listener, event: builderius_vcs_owners_resolve, method: onResolve }

  builderius_component.event_listener.default_components_on_template_creation:
    class: Builderius\Bundle\ComponentBundle\EventListener\DefaultComponentsCreationOnNewTemplatePostCreationEventListener
    arguments:
      - '@swoop_query.wp_query'
      - '@event_dispatcher'
    tags:
      - { name: swoop_event_listener, event: builderius_template_created, method: onTemplateCreation }

  builderius_component.event_listener.dynamic_data_condition_evaluation:
    class: Builderius\Bundle\ComponentBundle\EventListener\DynamicDataConditionEvaluationEventListener
    arguments:
      - '@builderius_component.twig.component_extension'
    tags:
      - { name: swoop_event_listener, event: builderius_dynamic_data_condition_evaluation, method: onDynamicDataConditionEvaluation }

  builderius_component.event_listener.component_dev_css_assets_creation:
    class: Builderius\Bundle\ComponentBundle\EventListener\ComponentDevCssAssetsCreationListener
    arguments:
      - '@swoop_query.wp_query'
      - '@builderius_setting.factory.builderius_global_settings_set_from_post'
      - '@builderius_component.factory.builderius_component_from_post'
    tags:
      - { name: swoop_event_listener, event: builderius_commit_created, method: create, priority: 75 }
      - { name: swoop_event_listener, event: builderius_generate_dev_css_assets, method: create }

  builderius_component.event_listener.component_prod_css_assets_creation:
    class: Builderius\Bundle\ComponentBundle\EventListener\ComponentProdCssAssetsCreationListener
    arguments:
      - '@builderius_deliverable.provider.deliverable.composite'
    tags:
      - { name: swoop_event_listener, event: builderius_release_published, method: create }
      - { name: swoop_event_listener, event: builderius_generate_prod_css_assets, method: create }

  builderius_component.event_listener.assets_registration.css_files.frontend:
    class: Builderius\Bundle\ComponentBundle\EventListener\CssFilesRegistrationInFrontendModeEventListener
    arguments:
      - '@builderius_deliverable.provider.deliverable.composite'
      - '@builderius_template.provider.deliverable_template_sub_module'
      - '@builderius_component.provider.deliverable_component.sub_module'
      - '@builderius_template.twig.template_data_vars_extension'
      - '@event_dispatcher'
    calls:
      - ['addCondition', ['@is_frontend']]
      - ['addCondition', ['@is_not_builderius_builder_mode']]
      - ['addCondition', ['@is_not_builderius_builder_inner_preview_mode']]
      - ['addCondition', ['@is_not_builderius_preview_in_dev_mode']]
      - ['addCondition', ['@has_applied_builderius_deliverable']]
      - ['addCondition', ['@has_applied_builderius_deliverable_template']]
    tags:
      - { name: swoop_event_listener, event: wp_assets_before_registration, method: beforeAssetsRegistration, priority: 79 }

  builderius_component.event_listener.assets_registration.css_files.preview:
    class: Builderius\Bundle\ComponentBundle\EventListener\CssFilesRegistrationInPreviewModeEventListener
    arguments:
      - '@builderius_template.provider.template'
      - '@builderius_component.provider.components'
      - '@builderius_template.twig.template_data_vars_extension'
      - '@event_dispatcher'
    calls:
      - ['addCondition', ['@is_frontend']]
      - ['addCondition', ['@is_not_builderius_builder_mode']]
      - ['addCondition', ['@is_not_builderius_builder_inner_preview_mode']]
      - ['addCondition', ['@is_builderius_preview_in_dev_mode']]
      - ['addCondition', ['@has_applied_builderius_template']]
    tags:
      - { name: swoop_event_listener, event: wp_assets_before_registration, method: beforeAssetsRegistration, priority: 79 }

  builderius_component.event_listener.inline_assets_registration.css.frontend:
    class: Builderius\Bundle\ComponentBundle\EventListener\CssRegistrationInFrontendModeEventListener
    arguments:
      - '@builderius_deliverable.provider.deliverable.composite'
      - '@builderius_template.provider.deliverable_template_sub_module'
      - '@builderius_component.provider.deliverable_component.sub_module'
      - '@builderius_template.twig.template_data_vars_extension'
      - '@templating'
    calls:
      - ['addCondition', ['@is_frontend']]
      - ['addCondition', ['@is_not_builderius_builder_mode']]
      - ['addCondition', ['@is_not_builderius_builder_inner_preview_mode']]
      - ['addCondition', ['@is_not_builderius_preview_in_dev_mode']]
      - ['addCondition', ['@has_applied_builderius_deliverable']]
      - ['addCondition', ['@has_applied_builderius_deliverable_template']]
    #tags:
    #  - { name: swoop_event_listener, event: wp_inline_assets_before_styles_registration, method: beforeAssetsRegistration, priority: 89 }

  builderius_component.event_listener.inline_assets_registration.css.preview:
    class: Builderius\Bundle\ComponentBundle\EventListener\CssRegistrationInPreviewModeEventListener
    arguments:
      - '@builderius_template.provider.template'
      - '@builderius_component.provider.components'
      - '@builderius_template.twig.template_data_vars_extension'
      - '@templating'
      - '@builderius_setting.factory.builderius_global_settings_set_from_post'
      - '@swoop_query.wp_query'
    calls:
      - ['addCondition', ['@is_frontend']]
      - ['addCondition', ['@is_not_builderius_builder_mode']]
      - ['addCondition', ['@is_not_builderius_builder_inner_preview_mode']]
      - ['addCondition', ['@is_builderius_preview_in_dev_mode']]
      - ['addCondition', ['@has_applied_builderius_template']]
    #tags:
    #  - { name: swoop_event_listener, event: wp_inline_assets_before_styles_registration, method: beforeAssetsRegistration, priority: 89 }

  builderius_component.event_listener.assets_registration.modules_assets.frontend:
    class: Builderius\Bundle\ComponentBundle\EventListener\ModulesAssetsRegistrationInFrontendModeEventListener
    arguments:
      - '@builderius_template.provider.deliverable_template_sub_module'
      - '@builderius_component.provider.deliverable_component.sub_module'
      - '@builderius_template.twig.template_data_vars_extension'
      - '@builderius_module.provider.composite'
      - '@builderius_component.twig.component_extension'
      - '@builderius_el.expression_language'
    calls:
      - ['addCondition', ['@is_frontend']]
      - ['addCondition', ['@is_not_builderius_builder_mode']]
      - ['addCondition', ['@is_not_builderius_builder_inner_preview_mode']]
      - ['addCondition', ['@is_not_builderius_preview_in_dev_mode']]
      - ['addCondition', ['@has_applied_builderius_deliverable']]
      - ['addCondition', ['@has_applied_builderius_deliverable_template']]
    tags:
      - { name: swoop_event_listener, event: wp_assets_before_registration, method: beforeAssetsRegistration, priority: 150 }

  builderius_component.event_listener.assets_registration.modules_inline_styles.frontend:
    class: Builderius\Bundle\ComponentBundle\EventListener\ModulesInlineAssetsRegistrationInFrontendModeEventListener
    arguments:
      - 'style'
      - '@builderius_template.provider.deliverable_template_sub_module'
      - '@builderius_component.provider.deliverable_component.sub_module'
      - '@builderius_template.twig.template_data_vars_extension'
      - '@builderius_module.provider.composite'
      - '@builderius_component.twig.component_extension'
      - '@builderius_el.expression_language'
      - '@templating'
    calls:
      - ['addCondition', ['@is_frontend']]
      - ['addCondition', ['@is_not_builderius_builder_mode']]
      - ['addCondition', ['@is_not_builderius_builder_inner_preview_mode']]
      - ['addCondition', ['@is_not_builderius_preview_in_dev_mode']]
      - ['addCondition', ['@has_applied_builderius_deliverable']]
      - ['addCondition', ['@has_applied_builderius_deliverable_template']]
    tags:
      - { name: swoop_event_listener, event: wp_inline_assets_before_styles_registration, method: beforeAssetsRegistration, priority: 79 }

  builderius_component.event_listener.assets_registration.modules_inline_scripts.frontend:
    class: Builderius\Bundle\ComponentBundle\EventListener\ModulesInlineAssetsRegistrationInFrontendModeEventListener
    arguments:
      - 'script'
      - '@builderius_template.provider.deliverable_template_sub_module'
      - '@builderius_component.provider.deliverable_component.sub_module'
      - '@builderius_template.twig.template_data_vars_extension'
      - '@builderius_module.provider.composite'
      - '@builderius_component.twig.component_extension'
      - '@builderius_el.expression_language'
      - '@templating'
    calls:
      - ['addCondition', ['@is_frontend']]
      - ['addCondition', ['@is_not_builderius_builder_mode']]
      - ['addCondition', ['@is_not_builderius_builder_inner_preview_mode']]
      - ['addCondition', ['@is_not_builderius_preview_in_dev_mode']]
      - ['addCondition', ['@has_applied_builderius_deliverable']]
      - ['addCondition', ['@has_applied_builderius_deliverable_template']]
    tags:
      - { name: swoop_event_listener, event: wp_inline_assets_before_scripts_registration, method: beforeAssetsRegistration, priority: 79 }

  builderius_component.event_listener.inline_assets_registration.modules_assets.preview:
    class: Builderius\Bundle\ComponentBundle\EventListener\ModulesAssetsRegistrationInPreviewModeEventListener
    arguments:
      - '@builderius_template.provider.template'
      - '@builderius_component.provider.components'
      - '@builderius_template.twig.template_data_vars_extension'
      - '@builderius_module.provider.composite'
      - '@builderius_component.twig.component_extension'
      - '@builderius_el.expression_language'
    calls:
      - ['addCondition', ['@is_frontend']]
      - ['addCondition', ['@is_not_builderius_builder_mode']]
      - ['addCondition', ['@is_not_builderius_builder_inner_preview_mode']]
      - ['addCondition', ['@is_builderius_preview_in_dev_mode']]
      - ['addCondition', ['@has_applied_builderius_template']]
    tags:
      - { name: swoop_event_listener, event: wp_assets_before_registration, method: beforeAssetsRegistration, priority: 150 }

  builderius_component.event_listener.inline_assets_registration.modules_inline_styles.preview:
    class: Builderius\Bundle\ComponentBundle\EventListener\ModulesInlineAssetsRegistrationInPreviewModeEventListener
    arguments:
      - 'style'
      - '@builderius_template.provider.template'
      - '@builderius_component.provider.components'
      - '@builderius_template.twig.template_data_vars_extension'
      - '@builderius_module.provider.composite'
      - '@builderius_component.twig.component_extension'
      - '@builderius_el.expression_language'
      - '@templating'
    calls:
      - ['addCondition', ['@is_frontend']]
      - ['addCondition', ['@is_not_builderius_builder_mode']]
      - ['addCondition', ['@is_not_builderius_builder_inner_preview_mode']]
      - ['addCondition', ['@is_builderius_preview_in_dev_mode']]
      - ['addCondition', ['@has_applied_builderius_template']]
    tags:
      - { name: swoop_event_listener, event: wp_inline_assets_before_styles_registration, method: beforeAssetsRegistration }

  builderius_component.event_listener.inline_assets_registration.modules_inline_scripts.preview:
    class: Builderius\Bundle\ComponentBundle\EventListener\ModulesInlineAssetsRegistrationInPreviewModeEventListener
    arguments:
      - 'script'
      - '@builderius_template.provider.template'
      - '@builderius_component.provider.components'
      - '@builderius_template.twig.template_data_vars_extension'
      - '@builderius_module.provider.composite'
      - '@builderius_component.twig.component_extension'
      - '@builderius_el.expression_language'
      - '@templating'
    calls:
      - ['addCondition', ['@is_frontend']]
      - ['addCondition', ['@is_not_builderius_builder_mode']]
      - ['addCondition', ['@is_not_builderius_builder_inner_preview_mode']]
      - ['addCondition', ['@is_builderius_preview_in_dev_mode']]
      - ['addCondition', ['@has_applied_builderius_template']]
    tags:
      - { name: swoop_event_listener, event: wp_inline_assets_before_scripts_registration, method: beforeAssetsRegistration }

  builderius_component.provider.composite_modules.component:
    class: Builderius\Bundle\ComponentBundle\Provider\BuilderiusCompositeComponentModulesProvider
    lazy: true
    public: true
    arguments:
      - '@builderius_graphql.executor.builderius_entities_graphql_queries'
      - '@builderius.cache.runtime'
    tags:
      - { name: builderius_composite_modules_provider }

  builderius_component.twig.component_extension:
    class: Builderius\Bundle\ComponentBundle\Twig\ComponentExtension
    arguments:
      - '@builderius_el.expression_language'
      - '@builderius.cache.runtime'
      - '@builderius_component.provider.components'
      - '@builderius_component.provider.deliverable_component.sub_module'
      - '@templating.twig.engine'
      - '@builderius_component.provider.data_vars.final_values'
      - [ '@is_frontend', '@is_builderius_preview_in_dev_mode', '@is_not_builderius_builder_mode', '@has_applied_any_of_builderius_entities' ]
      - [ '@is_frontend', '@is_not_builderius_builder_mode', '@is_not_builderius_preview_in_dev_mode', '@has_applied_builderius_deliverable', '@has_applied_any_of_deliverable_builderius_entities' ]
    tags:
      - { name: twig.extension }

  builderius_component.provider.components:
    class: Builderius\Bundle\ComponentBundle\Provider\BuilderiusComponentsProvider
    arguments:
      - '@builderius_component.factory.builderius_component_from_post'
      - '@builderius.cache.runtime'
      - '@swoop_query.wp_query'

  builderius_component.provider.deliverable_component.sub_module:
    class: Builderius\Bundle\ComponentBundle\Provider\DeliverableComponentSubModule\DeliverableComponentSubModuleProvider
    arguments:
      - '@builderius_deliverable.provider.deliverable.composite'
      - '@builderius.cache.runtime'

  builderius_component.provider.data_vars.final_values:
    class: Builderius\Bundle\ComponentBundle\Provider\DataVar\DataVarsFinalValuesProvider
    arguments:
      - '@builderius_template.generator.data_var_value.composite'
      - '@builderius_component.provider.components'
      - '@builderius_template.provider.template'
      - '@builderius_deliverable.provider.deliverable.composite'
      - '@builderius_component.provider.deliverable_component.sub_module'
      - '@builderius_template.provider.deliverable_template_sub_module'
      - ['@is_frontend', '@is_builderius_preview_in_dev_mode', '@is_not_builderius_builder_mode', '@has_applied_any_of_builderius_entities']
      - ['@is_frontend', '@is_not_builderius_builder_mode', '@is_not_builderius_preview_in_dev_mode', '@has_applied_builderius_deliverable', '@has_applied_any_of_deliverable_builderius_entities']
      - '@builderius.cache.runtime'
      - '@swoop_query.wp_query'
      - '@builderius_setting.factory.builderius_global_settings_set_from_post'
