﻿// Route config
console.i("configuring routes ...");
app.config(function ($routeProvider, $locationProvider) {
    var urlPath = window.location; // can't use $location here, as you can only inject providers into the config
    var locale = urlPath.pathname;

    // it sucks that we cannot do this automatically since we do
    // not have access to $rootScope.appVersion at this point
    // so everytime you update your views and you want to guarantee
    // users will not get a cached copy. just increase the version
    // to 1
    var manualViewVersion = "?v=1";


    // We use the current url to determine the user's locale pref, then we have to compose the angular views with this locale
    var errorView = locale + "/spa-app/views/home/html/error" + manualViewVersion;
    var loginView = locale + "/spa-app/views/home/html/login" + manualViewVersion;
    var signupView = locale + "/spa-app/views/home/html/signup" + manualViewVersion;
    var signupCompletedView = locale + "/spa-app/views/home/html/signupCompleted" + manualViewVersion;
    var twoFactorView = locale + "/spa-app/views/home/html/twoFactorLogin" + manualViewVersion;
    var dashboardView = locale + "/spa-app/views/dashboard/html/dashboard" + manualViewVersion;
    var ballotDashboardView = locale + "/spa-app/views/dashboard/html/ballotDashboard" + manualViewVersion;
    var singlePageVoting = locale + "/spa-app/views/dashboard/html/singlePageVoting" + manualViewVersion;
    var categorySubmissionView = locale + "/spa-app/views/category/html/categorySubmissions" + manualViewVersion;
    var submissionDetailsView = locale + "/spa-app/views/submission/html/submissionDetails" + manualViewVersion;
    var forgetPasswordView = locale + "/spa-app/views/home/html/forgotPassword" + manualViewVersion;
    var aboutView = locale + "/spa-app/views/home/html/about" + manualViewVersion;
    var helpView = locale + "/spa-app/views/home/html/help" + manualViewVersion;
    var contactView = "/spa-app/views/home/html/contact" + manualViewVersion;
    var changePasswordView = locale + "/spa-app/views/home/html/changePassword" + manualViewVersion;
    var forgotPasswordView = locale + "/spa-app/views/home/html/forgotPassword" + manualViewVersion;
    var resetPasswordView = locale + "/spa-app/views/home/html/resetPassword" + manualViewVersion;
    var roundClosedView = locale + "/spa-app/views/home/html/roundClosed" + manualViewVersion;
    var reviewMyBallotView = locale + "/spa-app/views/dashboard/html/reviewMyBallot" + manualViewVersion;
    var profileView = locale + "/spa-app/views/home/html/profile" + manualViewVersion;
    var cookieView = locale + "/spa-app/views/fragments/html/cookieMessage" + manualViewVersion;
    var memberManager = locale + "/spa-app/views/memberManagement/html/memberEditor" + manualViewVersion;
    var companyPayment = locale + "/spa-app/views/home/html/companyPayment" + manualViewVersion;

    $routeProvider.when("/", {
        controller: "loginController",
        reloadOnSearch: false,
        templateUrl: loginView
    });
    $routeProvider.when("/error", {
        controller: "errorController",
        templateUrl: errorView
    });
    $routeProvider.when("/login", {
        controller: "loginController",
        reloadOnSearch: false,
        templateUrl: loginView
    });
    $routeProvider.when("/signup", {
        controller: "SignupController",
        templateUrl: signupView
    });
    $routeProvider.when("/signupCompleted", {
        templateUrl: signupCompletedView
    });
    $routeProvider.when("/profile", {
        controller: "profileController",
        templateUrl: profileView
    });
    $routeProvider.when("/dashboard/:ballotId", {
        controller: "dashboardController",
        templateUrl: dashboardView
    });
    $routeProvider.when("/ballotDashboard", {
        controller: "ballotDashboardController",
        templateUrl: ballotDashboardView
    });
    $routeProvider.when("/singlePageVoting", {
        controller: "SinglePageVotingController",
        controllerAs: 'vm',
        templateUrl: singlePageVoting
    });
    $routeProvider.when("/categorySubmissions", {
        controller: "categorySubmissionsController",
        templateUrl: categorySubmissionView
    });
    $routeProvider.when("/categorySubmissions/:catId", {
        controller: "categorySubmissionsController",
        templateUrl: categorySubmissionView
    });
    $routeProvider.when("/submissionDetails/:subId", {
        controller: "submissionDetailsController",
        templateUrl: submissionDetailsView
    });
    $routeProvider.when("/changePassword", {
        controller: "changePasswordController",
        templateUrl: changePasswordView
    });
    $routeProvider.when("/forgotPassword", {
        controller: "forgotPasswordController",
        templateUrl: forgotPasswordView
    });
    $routeProvider.when("/resetPassword", {
        controller: "resetPasswordController",
        templateUrl: resetPasswordView
    });
    $routeProvider.when("/about", {
        controller: "homeController",
        templateUrl: aboutView
    });
    $routeProvider.when("/help", {
        controller: "homeController",
        templateUrl: helpView
    });
    $routeProvider.when("/contact", {
        controller: "homeController",
        templateUrl: contactView
    });
    $routeProvider.when("/reviewMyBallot", {
        controller: "reviewMyBallotController",
        templateUrl: reviewMyBallotView
    });
    $routeProvider.when("/roundClosed", {
        controller: "roundClosedController",
        templateUrl: roundClosedView
    });
    $routeProvider.when("/cookieMessage", {
        //controller: "cookieController",
        templateUrl: cookieView
    });
    $routeProvider.when("/manageMembers", {
        controller: "memberEditController",
        templateUrl: memberManager
    });
    $routeProvider.when("/companyPayment/:companyId", {
        controller: "companyPaymentController",
        templateUrl: companyPayment
    });
    $routeProvider.otherwise({ redirectTo: "/error" });
});

// gabe-untapt workaround from https://github.com/angular/angular.js/issues/7699
app.config(['$provide', function ($provide) {
    $provide.decorator('$browser', ['$delegate', function ($delegate) {
        var originalUrl = $delegate.url;
        $delegate.url = function () {
            var result = originalUrl.apply(this, arguments);
            if (result && result.replace) {
                result = result.replace(/%23/g, '#');
            }
            return result;
        };
        return $delegate;
    }]);
}]);
