File: //usr/local/CyberCP/packages/static/packages/packages.js
/**
 * Created by usman on 7/25/17.
 */
/**
 * Created by usman on 7/25/17.
 */
/* Utilities */
function getCookie(name) {
    var cookieValue = null;
    if (document.cookie && document.cookie !== '') {
        var cookies = document.cookie.split(';');
        for (var i = 0; i < cookies.length; i++) {
            var cookie = jQuery.trim(cookies[i]);
            // Does this cookie string begin with the name we want?
            if (cookie.substring(0, name.length + 1) === (name + '=')) {
                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                break;
            }
        }
    }
    return cookieValue;
}
/* Utilities ends here */
/* Java script code to create Pacakge */
$("#packageCreationFailed").hide();
$("#packageCreated").hide();
app.controller('createPackage', function ($scope, $http) {
    //$scope.pname = /([A-Z]){3,10}/gi;
    $scope.insertPackInDB = function () {
        var packageName = $scope.packageName;
        var diskSpace = $scope.diskSpace;
        var bandwidth = $scope.bandwidth;
        var ftpAccounts = $scope.ftpAccounts;
        var dataBases = $scope.dataBases;
        var emails = $scope.emails;
        if ($scope.allowFullDomain === undefined) {
            $scope.allowFullDomain = 0;
        }
        url = "/packages/submitPackage";
        var data = {
            packageName: packageName,
            diskSpace: diskSpace,
            bandwidth: bandwidth,
            ftpAccounts: ftpAccounts,
            dataBases: dataBases,
            emails: emails,
            allowedDomains: $scope.allowedDomains,
            enforceDiskLimits: $scope.enforceDiskLimits
        };
        var config = {
            headers: {
                'X-CSRFToken': getCookie('csrftoken')
            }
        };
        $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
        function ListInitialDatas(response) {
            console.log(response.data)
            if (response.data.saveStatus == 0) {
                $scope.errorMessage = response.data.error_message;
                $("#packageCreationFailed").fadeIn();
                $("#packageCreated").hide();
            } else {
                $("#packageCreationFailed").hide();
                $("#packageCreated").fadeIn();
                $scope.createdPackage = $scope.packageName;
            }
        }
        function cantLoadInitialDatas(response) {
            console.log("not good");
        }
    };
});
/* Java script code to to create Pacakge ends here */
/* Java script code to delete Pacakge */
$("#deleteFailure").hide();
$("#deleteSuccess").hide();
$("#deletePackageButton").hide();
app.controller('deletePackage', function ($scope, $http) {
    $scope.deletePackage = function () {
        $("#deletePackageButton").fadeIn();
    };
    $scope.deletePackageFinal = function () {
        var packageName = $scope.packageToBeDeleted;
        url = "/packages/submitDelete";
        var data = {
            packageName: packageName,
        };
        var config = {
            headers: {
                'X-CSRFToken': getCookie('csrftoken')
            }
        };
        $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
        function ListInitialDatas(response) {
            console.log(response.data)
            if (response.data.deleteStatus == 0) {
                $scope.errorMessage = response.data.error_message;
                $("#deleteFailure").fadeIn();
                $("#deleteSuccess").hide();
                $("#deletePackageButton").hide();
            } else {
                $("#deleteFailure").hide();
                $("#deleteSuccess").fadeIn();
                $("#deletePackageButton").hide();
                $scope.deletedPackage = packageName;
            }
        }
        function cantLoadInitialDatas(response) {
            console.log("not good");
        }
    };
});
/* Java script code to delete package ends here */
/* Java script code modify package */
$("#packageDetailsToBeModified").hide();
$("#modifyFailure").hide();
$("#modifySuccess").hide();
$("#modifyButton").hide();
$("#packageLoading").hide();
$("#successfullyModified").hide();
app.controller('modifyPackages', function ($scope, $http) {
    $scope.fetchDetails = function () {
        $("#packageLoading").show();
        $("#successfullyModified").hide();
        var packageName = $scope.packageToBeModified;
        url = "/packages/submitModify";
        var data = {
            packageName: packageName,
        };
        var config = {
            headers: {
                'X-CSRFToken': getCookie('csrftoken')
            }
        };
        $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
        function ListInitialDatas(response) {
            if (response.data.modifyStatus === 0) {
                $scope.errorMessage = response.data.error_message;
                $("#modifyFailure").fadeIn();
                $("#modifySuccess").hide();
                $("#modifyButton").hide();
                $("#packageLoading").hide();
            } else {
                $("#modifyButton").show();
                $scope.diskSpace = response.data.diskSpace;
                $scope.bandwidth = response.data.bandwidth;
                $scope.ftpAccounts = response.data.ftpAccounts;
                $scope.dataBases = response.data.dataBases;
                $scope.emails = response.data.emails;
                $scope.allowedDomains = response.data.allowedDomains;
                $scope.allowFullDomain = response.data.allowFullDomain === 1;
                $scope.enforceDiskLimits = response.data.enforceDiskLimits === 1;
                $scope.modifyButton = "Save Details";
                $("#packageDetailsToBeModified").fadeIn();
                $("#modifyFailure").hide();
                $("#modifySuccess").fadeIn();
                $("#packageLoading").hide();
            }
        }
        function cantLoadInitialDatas(response) {
            console.log("not good");
        }
    };
    $scope.modifyPackageFunc = function () {
        var packageName = $scope.packageToBeModified;
        var diskSpace = $scope.diskSpace;
        var bandwidth = $scope.bandwidth;
        var ftpAccounts = $scope.ftpAccounts;
        var dataBases = $scope.dataBases;
        var emails = $scope.emails;
        $("#modifyFailure").hide();
        $("#modifySuccess").hide();
        $("#packageLoading").show();
        $("#packageDetailsToBeModified").hide();
        url = "/packages/saveChanges";
        var data = {
            packageName: packageName,
            diskSpace: diskSpace,
            bandwidth: bandwidth,
            ftpAccounts: ftpAccounts,
            dataBases: dataBases,
            emails: emails,
            allowedDomains: $scope.allowedDomains,
            allowFullDomain: $scope.allowFullDomain,
            enforceDiskLimits: $scope.enforceDiskLimits,
        };
        var config = {
            headers: {
                'X-CSRFToken': getCookie('csrftoken')
            }
        };
        $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
        function ListInitialDatas(response) {
            if (response.data.saveStatus === 0) {
                $scope.errorMessage = response.data.error_message;
                $("#modifyFailure").fadeIn();
                $("#modifySuccess").hide();
                $("#modifyButton").hide();
                $("#packageLoading").hide();
            } else {
                $("#modifyButton").hide();
                $("#successfullyModified").fadeIn();
                $("#modifyFailure").hide();
                $("#packageLoading").hide();
                $scope.packageModified = packageName;
            }
        }
        function cantLoadInitialDatas(response) {
            console.log("not good");
        }
    };
});
/* Java script code to Modify Pacakge ends here */
app.controller('listPackageTables', function ($scope, $http, $timeout) {
    $scope.cyberpanelLoading = true;
    $scope.populateCurrentRecords = function () {
        $scope.cyberpanelLoading = false;
        url = "/packages/fetchPackagesTable";
        var data = {};
        var config = {
            headers: {
                'X-CSRFToken': getCookie('csrftoken')
            }
        };
        $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
        function ListInitialDatas(response) {
            $scope.cyberpanelLoading = true;
            if (response.data.status === 1) {
                $scope.records = JSON.parse(response.data.data);
                new PNotify({
                    title: 'Success!',
                    text: 'Packages successfully fetched!',
                    type: 'success'
                });
            } else {
                new PNotify({
                    title: 'Error!',
                    text: response.data.error_message,
                    type: 'error'
                });
            }
        }
        function cantLoadInitialDatas(response) {
            $scope.cyberpanelLoading = true;
            new PNotify({
                title: 'Error!',
                text: 'Could not connect to server, please refresh this page.',
                type: 'error'
            });
        }
    };
    $scope.populateCurrentRecords();
    $scope.deletePackageFinal = function (packageToBeDeleted) {
        $scope.cyberpanelLoading = false;
        url = "/packages/submitDelete";
        var data = {
            packageName: packageToBeDeleted,
        };
        var config = {
            headers: {
                'X-CSRFToken': getCookie('csrftoken')
            }
        };
        $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
        function ListInitialDatas(response) {
            $scope.cyberpanelLoading = true;
            if (response.data.status === 1) {
                $scope.populateCurrentRecords();
                new PNotify({
                    title: 'Success!',
                    text: 'Package successfully deleted!',
                    type: 'success'
                });
            } else {
                new PNotify({
                    title: 'Error!',
                    text: response.data.error_message,
                    type: 'error'
                });
            }
        }
        function cantLoadInitialDatas(response) {
            $scope.cyberpanelLoading = true;
            new PNotify({
                title: 'Error!',
                text: 'Could not connect to server, please refresh this page.',
                type: 'error'
            });
        }
    };
    $scope.editInitial = function (package, diskSpace, bandwidth,
                                   emailAccounts, dataBases, ftpAccounts, allowedDomains, allowFullDomain, enforceDiskLimits) {
        $scope.name = package;
        $scope.diskSpace = diskSpace;
        $scope.bandwidth = bandwidth;
        $scope.emails = emailAccounts;
        $scope.dataBases = dataBases;
        $scope.ftpAccounts = ftpAccounts;
        $scope.allowedDomains = allowedDomains;
        $scope.allowFullDomain = allowFullDomain;
        $scope.allowFullDomain = allowFullDomain === 1;
        $scope.enforceDiskLimits = enforceDiskLimits === 1;
    };
    $scope.confirmDelete = function (packageName) {
        $scope.packageToDelete = packageName;
        // Force Angular to update the view
        $scope.$applyAsync(function() {
            // Use timeout to ensure DOM is ready
            $timeout(function() {
                $('#deletePackageModal').modal('show');
            }, 0);
        });
    };
    $scope.saveChanges = function () {
        var packageName = $scope.name;
        var diskSpace = $scope.diskSpace;
        var bandwidth = $scope.bandwidth;
        var ftpAccounts = $scope.ftpAccounts;
        var dataBases = $scope.dataBases;
        var emails = $scope.emails;
        url = "/packages/saveChanges";
        var data = {
            packageName: packageName,
            diskSpace: diskSpace,
            bandwidth: bandwidth,
            ftpAccounts: ftpAccounts,
            dataBases: dataBases,
            emails: emails,
            allowedDomains: $scope.allowedDomains,
            allowFullDomain: $scope.allowFullDomain,
            enforceDiskLimits: $scope.enforceDiskLimits,
        };
        var config = {
            headers: {
                'X-CSRFToken': getCookie('csrftoken')
            }
        };
        $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
        function ListInitialDatas(response) {
            $scope.cyberpanelLoading = true;
            if (response.data.saveStatus === 1) {
                $scope.populateCurrentRecords();
                new PNotify({
                    title: 'Success!',
                    text: 'Package successfully updated!',
                    type: 'success'
                });
            } else {
                new PNotify({
                    title: 'Error!',
                    text: response.data.error_message,
                    type: 'error'
                });
            }
        }
        function cantLoadInitialDatas(response) {
            $scope.cyberpanelLoading = true;
            new PNotify({
                title: 'Error!',
                text: 'Could not connect to server, please refresh this page.',
                type: 'error'
            });
        }
    };
});