/*
 * 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.
 */
import angular from 'angular';
import template from './breadcrumbs.template.html';

const MODULE_NAME = 'brooklyn.components.breadcrumbs';
const TEMPLATE_URL = 'blueprint-composer/component/breadcrumbs/index.html';

angular.module(MODULE_NAME, [])
    .directive('breadcrumbs', breadcrumbsDirective)
    .run(['$templateCache', templateCache]);

export default MODULE_NAME;

export function breadcrumbsDirective() {
    return {
        restrict: 'E',
        templateUrl: function(tElement, tAttrs) {
            return tAttrs.templateUrl || TEMPLATE_URL;
        },
        scope: {
            entity: '<',
            current: '<'
        },
        link: link
    };

    function link(scope) {
        if (scope.entity) {
            scope.breadcrumbs = [];
            if (scope.current) {
                scope.breadcrumbs.push(scope.current);
            }

            let currentEntity = scope.entity;
            while (currentEntity.hasParent()) {
                scope.breadcrumbs.push(currentEntity);
                currentEntity = currentEntity.parent;
            }
            scope.breadcrumbs.push(currentEntity);
            scope.breadcrumbs.reverse();
        }
    }
}

function templateCache($templateCache) {
    $templateCache.put(TEMPLATE_URL, template);
}