/// <reference path="../../app.js" />
/// <reference path="../enums.js" />
commonModule.factory('appTabRouteProvider', ['$log', 'enums', 'constants',
    function ($log, enums, constants) {
    'use strict';
    $log.debug('appTabRouteProvider.ctor()...');
    var i;
    var reportDynamicRoutes = [];
    var getTabRouteUrl = function (tab)
    {
        if (tab.tabType === enums.tabType.worklist) {
            tab.state = 'dashboard'
            return '/dashboard/compare';
        } else if (tab.tabType === enums.tabType.registration) {
           
            return '/';
        } else if (tab.tabType === enums.tabType.report) {
            var availableTab = _.find(reportDynamicRoutes, function (route) { return route.tabId === tab.tabId; });
            if (availableTab) {
                return '/{0}/{1}'.format(availableTab.routeViewName, tab.tabId);
            }

            availableTab = _.find(reportDynamicRoutes, function (route) { return route.isWorking === false; });
            if (availableTab) {
                availableTab.tabId = tab.tabId;
                availableTab.isWorking = true;
                tab.state = availableTab.routeState;
                tab.route = availableTab;
                return '/{0}/{1}'.format(availableTab.routeViewName, tab.tabId);
            }

            $log.error('Registration met the ceiling!');
            return '/';
        } else if (tab.tabType === enums.tabType.clientSetting) {
            tab.state = 'progress';
            return '/progress';
        } else if (tab.tabType === enums.tabType.selfServiceSetting) {
            tab.state = 'ris.selfservicesetting'
            return '/selfservicesetting';
        } else {
            $log.error(tab.tabType + ' is not supported!');
            return '/';
        }
    };

    var tabCeiling = constants.tabCeiling - 1;
    var registrationDynamicRoutes = [];
    for (i = 1; i <= tabCeiling; i++) {
        registrationDynamicRoutes.push({
            routeState: 'ris.registration{0}'.format(i),
            routeViewName: 'registration{0}'.format(i),
            isWorking: false,
            tabId: ''
        });
    };

    
    for (i = 1; i <= tabCeiling; i++) {
        reportDynamicRoutes.push({
            routeState: 'ris.report{0}'.format(i),
            routeViewName: 'report{0}'.format(i),
            isWorking: false,
            tabId: ''
        });
    };

    return {
        getTabRouteUrl: getTabRouteUrl,
        registrationDynamicRoutes: registrationDynamicRoutes,
        reportDynamicRoutes: reportDynamicRoutes
    };
}
]);