services:
  builderius_template.registry.locations:
    class: Builderius\Bundle\TemplateBundle\Location\Registry\BuilderiusTemplateLocationsRegistry
    lazy: true

  builderius_template.apply_rules.checker:
    class: Builderius\Bundle\TemplateBundle\Location\Checker\BuilderiusTemplateApplyRulesChecker
    arguments:
      - '@builderius_template.registry.locations'
      - '@builderius_el.expression_language'
      - '@swoop_kernel.provider.plugins_versions'

  #----------------------- Location -------------------------------------------

  builderius_template.location.front_page:
    class: Builderius\Bundle\TemplateBundle\Location\BuilderiusTemplateLocation
    arguments:
      - name: 'front_page'
        label: 'Front Page'
        expression: 'query.is_front_page() === true && query.is_home() === false'
        sort_order: 10
    tags:
      - { name: builderius_template_location, priority: 10 }

  builderius_template.location.home:
    class: Builderius\Bundle\TemplateBundle\Location\BuilderiusTemplateLocation
    arguments:
      - name: 'home'
        label: 'Blog Index'
        expression: 'query.is_home() === true'
        sort_order: 10
    tags:
      - { name: builderius_template_location, priority: 20 }

  builderius_template.location.singulars:
    class: Builderius\Bundle\TemplateBundle\Location\BuilderiusTemplateLocation
    arguments:
      - name: 'singulars'
        label: 'All Singulars'
        expression: 'query.is_singular("post") === true || query.is_page === true'
        sort_order: 90
    tags:
      - { name: builderius_template_location, priority: 30 }

  builderius_template.location.blog_posts:
    class: Builderius\Bundle\TemplateBundle\Location\BuilderiusTemplateLocation
    arguments:
      - name: 'blog_posts'
        label: 'Posts'
        expression: 'query.is_singular("post") === true'
        sort_order: 20
    tags:
      - { name: builderius_template_location, priority: 40 }

  builderius_template.location.pages:
    class: Builderius\Bundle\TemplateBundle\Location\BuilderiusTemplateLocation
    arguments:
      - name: 'pages'
        label: 'Pages'
        expression: 'query.is_page === true'
        sort_order: 20
    tags:
      - { name: builderius_template_location, priority: 50 }

  builderius_template.location.archives:
    class: Builderius\Bundle\TemplateBundle\Location\BuilderiusTemplateLocation
    arguments:
      - name: 'archives'
        label: 'All Archives'
        expression: 'query.is_category === true || query.is_tag === true || query.is_author === true || query.is_date === true || query.is_search === true'
        sort_order: 90
    tags:
      - { name: builderius_template_location, priority: 100 }

  builderius_template.location.is_404:
    class: Builderius\Bundle\TemplateBundle\Location\BuilderiusTemplateLocation
    arguments:
      - name: '404'
        label: '404 Not Found'
        expression: 'query.is_404 === true'
        sort_order: 10
    tags:
      - { name: builderius_template_location, priority: 999 }

  builderius_template.location.entire_site:
    class: Builderius\Bundle\TemplateBundle\Location\BuilderiusTemplateLocation
    arguments:
      - name: 'entire_site'
        label: 'Entire Website'
        expression: 'query.is_category === true || query.is_tag === true || query.is_author === true || query.is_date === true || query.is_search === true || query.is_home === true || query.is_singular("post") === true || query.is_page === true || query.is_404 === true'
        sort_order: 100
    tags:
      - { name: builderius_template_location, priority: 1000 }

  #----------------------- Possible Arguments Providers ----------------------------

  builderius_template.location.arguments_provider.available_singulars.id:
    class: Builderius\Bundle\TemplateBundle\Location\Provider\AvailableSingularsProvider

  builderius_template.location.arguments_provider.available_pages.id:
    class: Builderius\Bundle\TemplateBundle\Location\Provider\AvailablePagesProvider
    calls:
      - [ setWpQuery, [ '@swoop_query.wp_query' ] ]
    tags:
      - { name: builderius_available_singulars_provider_id }

  builderius_template.location.arguments_provider.available_pages.name:
    class: Builderius\Bundle\TemplateBundle\Location\Provider\AvailablePagesProvider
    arguments:
      - 'post_name'
    calls:
      - [ setWpQuery, [ '@swoop_query.wp_query' ] ]
    tags:
      - { name: builderius_available_singulars_provider_name }

  builderius_template.location.arguments_provider.available_blog_posts.id:
    class: Builderius\Bundle\TemplateBundle\Location\Provider\AvailablePostsProvider
    arguments:
      - post_type: 'post'
    calls:
      - [setWpQuery, ['@swoop_query.wp_query']]
    tags:
      - { name: builderius_available_singulars_provider_id }

  builderius_template.location.arguments_provider.available_blog_posts.name:
    class: Builderius\Bundle\TemplateBundle\Location\Provider\AvailablePostsProvider
    arguments:
      - post_type: 'post'
      - 'post_name'
    calls:
      - [setWpQuery, ['@swoop_query.wp_query']]
    tags:
      - { name: builderius_available_singulars_provider_name }

  builderius_template.location.arguments_provider.available_categories:
    class: Builderius\Bundle\TemplateBundle\Location\Provider\AvailableCategoriesProvider

  builderius_template.location.arguments_provider.available_categories.slug:
    class: Builderius\Bundle\TemplateBundle\Location\Provider\AvailableCategoriesProvider
    arguments:
      - 'slug'

  builderius_template.location.arguments_provider.available_tags:
    class: Builderius\Bundle\TemplateBundle\Location\Provider\AvailableTagsProvider

  builderius_template.location.arguments_provider.available_tags.slug:
    class: Builderius\Bundle\TemplateBundle\Location\Provider\AvailableTagsProvider
    arguments:
      - 'slug'

  builderius_template.location.arguments_provider.available_post_statuses:
    class: Builderius\Bundle\TemplateBundle\Location\Provider\AvailablePostStatusesProvider

  builderius_template.location.arguments_provider.available_users.id:
    class: Builderius\Bundle\TemplateBundle\Location\Provider\AvailableUsersProvider

  builderius_template.location.arguments_provider.available_users.login:
    class: Builderius\Bundle\TemplateBundle\Location\Provider\AvailableUsersProvider
    arguments:
      - 'user_login'

  builderius_template.location.arguments_provider.available_nav_menus:
    class: Builderius\Bundle\TemplateBundle\Location\Provider\AvailableNavMenusProvider
