<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.
-->
<section class="container">
    <div class="row">
        <div class="col-sm-8 col-xs-6">
            <input ng-model="state.search.$" type="text" placeholder="Search for bundles or types" class="form-control" />
        </div>
        <div class="col-sm-3 col-sm-offset-1 col-xs-6 text-right">
            <button class="btn btn-success" ng-click="launchCatalogUploader()">
                <i class="fa fa-fw fa-upload"></i>
                Upload to catalog
            </button>
        </div>
    </div>
    <div class="row" ng-if="isNonEmpty(state.search)">
        <div class="col-md-12 clear-search" ng-click="clearSearchFilters()">
            <i class="fa fa-fw fa-window-close"></i> Clear current search query, filters, and sorts
        </div>
    </div>

    <div class="row">
        <div class="col-md-12">
            <header class="row filters">
                <div class="col-sm-6">
                    <div class="btn-group btn-group-sm" role="group" aria-label="View switcher">
                        <button ng-model="state.view" uib-btn-radio="'bundles'" type="button" class="btn btn-default" ng-class="{'btn-primary': state.view === 'bundles'}">Bundles</button>
                        <button ng-model="state.view" uib-btn-radio="'types'" type="button" class="btn btn-default" ng-class="{'btn-primary': state.view === 'types'}">Types</button>
                    </div>
                </div>
                <div class="col-sm-6 text-right">
                    <div class="btn-group" uib-dropdown>
                        <button type="button" class="btn btn-link" uib-dropdown-toggle>
                            Version <span class="caret"></span>
                        </button>
                        <ul class="dropdown-menu dropdown-menu-right" uib-dropdown-menu>
                            <li ng-repeat="version in config.versions | orderBy:'-' track by $index" ng-class="{'active': state.search.version === version}">
                                <a ng-click="state.search.version = version">{{version}}</a>
                            </li>
                        </ul>
                    </div>
                    <div class="btn-group" uib-dropdown>
                        <button type="button" class="btn btn-link" uib-dropdown-toggle>
                            Sort <span class="caret"></span>
                        </button>
                        <ul class="dropdown-menu dropdown-menu-right" uib-dropdown-menu>
                            <li ng-repeat="orderBy in config.orderBy track by orderBy.id" ng-class="{'active': state.orderBy === orderBy}">
                                <a ng-click="state.orderBy = orderBy">{{orderBy.label}}</a>
                            </li>
                        </ul>
                    </div>
                </div>
            </header>
        </div>

        <div class="col-md-12">
            <ul class="list-group list-group-bundles" ng-show="state.view === 'bundles'">
                <li ng-repeat="bundle in bundles | filter:state.search | orderBy:state.orderBy.id as filteredBundles track by (bundle.symbolicName + bundle.version)"
                        ng-class="{'expanded': !isCollapsed, 'is-expandable': bundle.types.length > 0}"
                        class="list-group-item bundles-list">
                    <div class="media bundle-top-region" ng-init="isCollapsed = true" ng-click="isCollapsed = bundle.types.length > 0 ? !isCollapsed : true">
                        <div class="media-left">
                            <a ui-sref="bundle({bundleId: bundle.symbolicName, bundleVersion: bundle.version})">
                                <img ng-src="{{::bundle | iconGeneratorPipe:'symbolicName'}}" class="media-object" alt="{{::bundle.symbolicName}}'s logo" />
                            </a>
                        </div>
                        <div class="media-body catalog-item-body">
                            <div class="pull-right highlights" ng-bind-html="::bundle | bundleHighlights"></div>
                            <h4 class="media-heading">
                                <a ui-sref="bundle({bundleId: bundle.symbolicName, bundleVersion: bundle.version})" class="list-group-item-heading">
                                    {{bundle | bundleName}}
                                </a>
                                <span class="label label-default">{{::bundle.version}}</span>
                            </h4>
                            <p class="media-auto-wrap text-muted" ng-if="bundle.symbolicName.startsWith('brooklyn-catalog-bom')"><small>
                                <i class="fa fa-fw fa-exclamation-circle"></i> This bundle comes from a BOM file that does not declare a bundle name
                            </small></p>
                            <p class="media-auto-wrap text-muted" ng-if="bundle.types.length == 0"><small>
                                <i class="fa fa-fw fa-exclamation-circle"></i> No registered types in this bundle
                            </small></p>
                            <p class="media-description">{{bundle | bundleDescription}}</p>
                        </div>
                    </div>

                    <div class="extra" uib-collapse="isCollapsed">
                        <div ng-init="filteredEntities = (bundle.types | bundleTypeFilter:'org.apache.brooklyn.api.entity.Entity' | filter:state.search)" ng-show="::filteredEntities.length > 0">
                            <ul class="list-group list-group-types">
                                <li class="list-group-item typed-group-table-header">
                                    <ng-pluralize count="::filteredEntities.length"
                                              when="{'one': 'Entity', 'other': 'Entities'}">
                                    </ng-pluralize>
                                </li>
                                <li ng-repeat="entity in filteredEntities track by (entity.containingBundle + entity.symbolicName + entity.version)"
                                        ng-class="{'deprecated': entity.deprecated, 'disabled': entity.disabled}"
                                        class="list-group-item">
                                    <type-item bundle="bundle" type="entity"></type-item>
                                </li>
                            </ul>
                        </div>
                        <div ng-init="filteredPolicies = (bundle.types | bundleTypeFilter:'org.apache.brooklyn.api.policy.Policy' | filter:state.search)" ng-show="::filteredPolicies.length > 0">
                            <ul class="list-group list-group-types">
                                <li class="list-group-item typed-group-table-header">
                                    <ng-pluralize count="::filteredPolicies.length"
                                              when="{'one': 'Policy', 'other': 'Policies'}">
                                    </ng-pluralize>
                                </li>
                                <li ng-repeat="policy in filteredPolicies track by (policy.containingBundle + policy.symbolicName + policy.version)"
                                    ng-class="{'deprecated': policy.deprecated, 'disabled': policy.disabled}"
                                    class="list-group-item">
                                    <type-item bundle="bundle" type="policy"></type-item>
                                </li>
                            </ul>
                        </div>
                        <div ng-init="filteredEnrichers = (bundle.types | bundleTypeFilter:'org.apache.brooklyn.api.sensor.Enricher' | filter:state.search)" ng-show="::filteredEnrichers.length > 0">
                            <ul class="list-group list-group-types">
                                <li class="list-group-item typed-group-table-header">
                                    <ng-pluralize count="::filteredEnrichers.length"
                                              when="{'one': 'Enricher', 'other': 'Enrichers'}">
                                    </ng-pluralize>
                                </li>
                                <li ng-repeat="enricher in filteredEnrichers track by (enricher.containingBundle + enricher.symbolicName + enricher.version)"
                                    ng-class="{'deprecated': enricher.deprecated, 'disabled': enricher.disabled}"
                                    class="list-group-item">
                                    <type-item bundle="bundle" type="enricher"></type-item>
                                </li>
                            </ul>
                        </div>
                        <h5 ng-init="additionalTypes = bundle.types.length - filteredEntities.length - filteredPolicies.length - filteredEnrichers.length"
                             ng-show="additionalTypes > 0"
                             class="text-info">
                            <i class="fa fa-fw fa-info-circle"></i>
                            There <ng-pluralize count="::additionalTypes" when="{'one': 'is {} type', 'other': 'are {} types'}"></ng-pluralize> in this bundle
                                <span ng-if="additionalTypes < bundle.types.length"> in addition to the 
                                    above<span ng-if="isNonEmpty(state.search)"> not matching the search criteria</span>.</span>
                                <span ng-if="additionalTypes == bundle.types.length"> but no entities, enrichers or 
                                    policies<span ng-if="isNonEmpty(state.search)"> matching the search criteria</span>.</span>
                        </h5>
                    </div>
                </li>

                <li ng-show="!bundles" class="list-group-item loading">
                    <h4>Loading bundles</h4>
                </li>
                <li ng-show="bundle.types.length === 0" class="list-group-item empty">
                    <h4>There is no items in the catalog</h4>
                    <button class="btn btn-primary" ng-click="launchCatalogUploader()">Upload some</button>
                </li>
                <li ng-show="bundle.types.length > 0 && filteredBundles.length === 0" class="list-group-item no-results">
                    <h4>No results matching current filters</h4>
                </li>
            </ul>

            <ul class="list-group list-group-types" ng-show="state.view === 'types'">
                <li ng-repeat="type in types | filter:state.search | orderBy:state.orderBy.id  as filteredTypes track by (type.containingBundle + type.symbolicName + type.version)"
                    ng-class="{'deprecated': type.deprecated, 'disabled': type.disabled}"
                    class="list-group-item">
                    <type-item bundle="type.bundle" type="type" show-bundle="true" show-type="true"></type-item>
                </li>

                <li ng-show="!types" class="list-group-item loading">
                    <h4>Loading types</h4>
                </li>
                <li ng-show="types.length === 0" class="list-group-item empty">
                    <h4>There is no items in the catalog</h4>
                    <button class="btn btn-primary" ng-click="launchCatalogUploader()">Upload some</button>
                </li>
                <li ng-show="filteredTypes.length === 0" class="list-group-item no-results">
                    <h4>No results matching current filters</h4>
                </li>
            </ul>
        </div>
    </div>
</section>
