/**
 * 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.
 */

var App = require('app');

module.exports = Em.Route.extend({
  route: '/views',
  enter: function (router) {
    router.get('mainViewsController').loadAmbariViews();
  },
  index: Em.Route.extend({
    route: '/',
    connectOutlets: function (router) {
      router.get('mainViewsController').dataLoading().done(function() {
        router.get('mainController').connectOutlet('mainViews');
      });
    }
  }),
  viewDetails: Em.Route.extend({
    route: '/:viewName/:version/:instanceName',
    connectOutlets: function (router, params) {
      // find and set content for `mainViewsDetails` and associated controller

      var href = ['/views', params.viewName, params.version, params.instanceName].join('/');
      var viewPath = this.parseViewPath(window.location.href.slice(window.location.href.indexOf('?')));
      if (viewPath) {
        href = ['/views', params.viewName, params.version, params.instanceName.slice(0, params.instanceName.lastIndexOf('?'))].join('/');
      }

      router.get('mainViewsController').dataLoading().done(function() {
        var content = App.router.get('mainViewsController.ambariViews').findProperty('href', href);
        if (content) content.set('viewPath', viewPath);
        router.get('mainController').connectOutlet('mainViewsDetails', content);
      });
    },
    /**
     * parse internal view path
     * "viewPath" - used as a key of additional path
     * Example:
     *   origin URL: viewName?viewPath=%2Fuser%2Fadmin%2Faddress&foo=bar&count=1
     * should be translated to
     *   view path: /user/admin/address?foo=bar&count=1
     *
     * @param {string} instanceName
     * @returns {string}
     */
    parseViewPath: function (instanceName) {
      var path = '';
      if (instanceName.contains('?')) {
        path = instanceName.slice(instanceName.indexOf('?'));
        if (path.contains('viewPath')) {
          path = decodeURIComponent(path.slice((path.lastIndexOf('?viewPath=') + 10))).replace('&', '?');
        }
      }
      return path;
    }
  })
});
