/* Minification failed. Returning unminified contents.
(1,11): run-time error CSS1031: Expected selector, found '='
(1,11): run-time error CSS1025: Expected comma or open brace, found '='
(9,7): run-time error CSS1030: Expected identifier, found 'config('
(9,7): run-time error CSS1031: Expected selector, found 'config('
(9,7): run-time error CSS1025: Expected comma or open brace, found 'config('
(15,10): run-time error CSS1031: Expected selector, found 'getAppVersion('
(15,10): run-time error CSS1025: Expected comma or open brace, found 'getAppVersion('
(19,10): run-time error CSS1031: Expected selector, found 'showLoading('
(19,10): run-time error CSS1025: Expected comma or open brace, found 'showLoading('
(23,10): run-time error CSS1031: Expected selector, found 'hideLoading('
(23,10): run-time error CSS1025: Expected comma or open brace, found 'hideLoading('
(27,10): run-time error CSS1031: Expected selector, found 'downloadFile('
(27,10): run-time error CSS1025: Expected comma or open brace, found 'downloadFile('
(38,17): run-time error CSS1031: Expected selector, found ';'
(38,17): run-time error CSS1025: Expected comma or open brace, found ';'
(40,10): run-time error CSS1031: Expected selector, found 'showInfoMessage('
(40,10): run-time error CSS1025: Expected comma or open brace, found 'showInfoMessage('
(47,10): run-time error CSS1031: Expected selector, found 'showDangerMessage('
(47,10): run-time error CSS1025: Expected comma or open brace, found 'showDangerMessage('
(54,10): run-time error CSS1031: Expected selector, found 'showSuccessMessage('
(54,10): run-time error CSS1025: Expected comma or open brace, found 'showSuccessMessage('
(61,10): run-time error CSS1031: Expected selector, found 'showErrorMessage('
(61,10): run-time error CSS1025: Expected comma or open brace, found 'showErrorMessage('
(66,10): run-time error CSS1031: Expected selector, found 'convertOrderStatus('
(66,10): run-time error CSS1025: Expected comma or open brace, found 'convertOrderStatus('
(105,10): run-time error CSS1031: Expected selector, found 'convertMonthlyReportStatus('
(105,10): run-time error CSS1025: Expected comma or open brace, found 'convertMonthlyReportStatus('
(119,10): run-time error CSS1031: Expected selector, found 'convertToShortMonth('
(119,10): run-time error CSS1025: Expected comma or open brace, found 'convertToShortMonth('
(149,10): run-time error CSS1031: Expected selector, found 'convertUnitType('
(149,10): run-time error CSS1025: Expected comma or open brace, found 'convertUnitType('
(187,25): run-time error CSS1031: Expected selector, found '='
(187,25): run-time error CSS1025: Expected comma or open brace, found '='
(192,27): run-time error CSS1031: Expected selector, found '='
(192,27): run-time error CSS1025: Expected comma or open brace, found '='
(197,24): run-time error CSS1031: Expected selector, found '='
(197,24): run-time error CSS1025: Expected comma or open brace, found '='
(203,26): run-time error CSS1031: Expected selector, found '='
(203,26): run-time error CSS1025: Expected comma or open brace, found '='
(209,14): run-time error CSS1031: Expected selector, found '='
(209,14): run-time error CSS1025: Expected comma or open brace, found '='
(230,19): run-time error CSS1031: Expected selector, found '='
(230,19): run-time error CSS1025: Expected comma or open brace, found '='
(233,10): run-time error CSS1031: Expected selector, found 'dateDiffInDays('
(233,10): run-time error CSS1025: Expected comma or open brace, found 'dateDiffInDays('
(241,10): run-time error CSS1031: Expected selector, found 'formatDate('
(241,10): run-time error CSS1025: Expected comma or open brace, found 'formatDate('
(253,10): run-time error CSS1031: Expected selector, found 'time_ago('
(253,10): run-time error CSS1025: Expected comma or open brace, found 'time_ago('
(307,16): run-time error CSS1031: Expected selector, found '='
(307,16): run-time error CSS1025: Expected comma or open brace, found '='
(312,16): run-time error CSS1031: Expected selector, found '='
(312,16): run-time error CSS1025: Expected comma or open brace, found '='
(358,16): run-time error CSS1031: Expected selector, found '='
(358,16): run-time error CSS1025: Expected comma or open brace, found '='
(364,19): run-time error CSS1031: Expected selector, found '='
(364,19): run-time error CSS1025: Expected comma or open brace, found '='
(406,23): run-time error CSS1031: Expected selector, found '='
(406,23): run-time error CSS1025: Expected comma or open brace, found '='
(411,19): run-time error CSS1031: Expected selector, found '='
(411,19): run-time error CSS1025: Expected comma or open brace, found '='
(424,27): run-time error CSS1031: Expected selector, found '='
(424,27): run-time error CSS1025: Expected comma or open brace, found '='
(429,24): run-time error CSS1031: Expected selector, found '='
(429,24): run-time error CSS1025: Expected comma or open brace, found '='
(437,24): run-time error CSS1031: Expected selector, found '='
(437,24): run-time error CSS1025: Expected comma or open brace, found '='
(448,16): run-time error CSS1031: Expected selector, found '='
(448,16): run-time error CSS1025: Expected comma or open brace, found '='
(462,16): run-time error CSS1031: Expected selector, found '='
(462,16): run-time error CSS1025: Expected comma or open brace, found '='
(468,5): run-time error CSS1031: Expected selector, found '='
(468,5): run-time error CSS1025: Expected comma or open brace, found '='
(502,7): run-time error CSS1030: Expected identifier, found 'factory('
(502,7): run-time error CSS1031: Expected selector, found 'factory('
(502,7): run-time error CSS1025: Expected comma or open brace, found 'factory('
 */
var sbApp = angular.module('sb-app',
    [
        'dx',
        'angularModalService',
        'angular-modal',
        'ngSanitize',
    ]);

sbApp.config(['$locationProvider', function ($locationProvider) {
    $locationProvider.html5Mode({
        enabled: true,
        requireBase: false
    });
}]);
function getAppVersion() {
    return "v1";
}

function showLoading() {
    $.LoadingOverlay("show");
}

function hideLoading() {
    $.LoadingOverlay("hide");
}

function downloadFile(fileName, blobData) {
    var url = window.URL.createObjectURL(blobData);
    var link = document.createElement("a");
    link.setAttribute("href", url);
    link.setAttribute("download", fileName);
    link.style.display = "none";
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
}

var alertTimeOut;

function showInfoMessage(msg) {
    clearTimeout(alertTimeOut);
    $("#alert-info").fadeIn(500);
    $("#alert-info-msg").html(msg);
    alertTimeOut = setTimeout(function () { $("#alert-info").fadeOut(500); }, 3000);
}

function showDangerMessage(msg) {
    clearTimeout(alertTimeOut);
    $("#alert-danger").fadeIn(500);
    $("#alert-danger-msg").html(msg);
    alertTimeOut = setTimeout(function () { $("#alert-danger").fadeOut(500); }, 3000);
}

function showSuccessMessage(msg) {
    clearTimeout(alertTimeOut);
    $("#alert-success").fadeIn(500);
    $("#alert-success-msg").html(msg);
    alertTimeOut = setTimeout(function () { $("#alert-success").fadeOut(500); }, 3000);
}

function showErrorMessage(error) {
    showDangerMessage("Oops.. Unexpected error occurred.");
    console.log(error);
}

function convertOrderStatus(statusId, customStatus) {
    var status = "";
    switch (statusId) {
        case OrderStatus.delivered:
            status = "Delivered";
            break;
        case OrderStatus.draft:
            status = "Draft";
            break;
        case OrderStatus.new:
            status = "New";
            break;
        case OrderStatus.pendingForPaymentVerification:
            status = "Pending Payment Verification";
            break;
        case OrderStatus.paymentVerificationFailed:
            status = "Payment Verification Failed";
            break;
        case OrderStatus.pickUpForDelivery:
            status = "Pick Up For Delivery";
            break;
        case OrderStatus.proccessing:
            status = "Proccessing";
            break;
        case OrderStatus.waitingForPayment:
            status = "Waiting For Payment";
            break;
        case OrderStatus.paymentRejected:
            status = "Payment Verification Failed";
        case OrderStatus.waitingForPickUp:
            status = "Waiting For Pick Up";
            break;
        case OrderStatus.other:
            status = customStatus;
    }

    return status;
}

function convertMonthlyReportStatus(statusId) {
    var status = "";
    switch (statusId) {
        case MonthlyReportStatus.submitted:
            status = "Submitted";
            break;
        case MonthlyReportStatus.draft:
            status = "Draft";
            break;
    }

    return status;
}

function convertToShortMonth(month) {
    switch (month) {
        case 0:
            return "JAN";
        case 1:
            return "FEB";
        case 2:
            return "MAR";
        case 3:
            return "APR";
        case 4:
            return "MAY";
        case 5:
            return "JUN";
        case 6:
            return "JUL";
        case 7:
            return "AUG";
        case 8:
            return "SEP";
        case 9:
            return "OCT";
        case 10:
            return "NOV";
        case 11:
            return "DEC";
    }
}


function convertUnitType(unitType) {
    var name = "";
    switch (unitType) {
        case UnitType.btl:
            name = "BTL";
            break;
        case UnitType.pack:
            name = "PACK";
            break;
        case UnitType.pcs:
            name = "PCS";
            break;
        case UnitType.svg:
            name = "SVG";
            break;
        case UnitType.ctn:
            name = "CTN";
            break;
        case UnitType.roll:
            name = "SET";
            break;
        case UnitType.bundles:
            name = "SET";
            break;
        case UnitType.box:
            name = "SET";
            break;
        case UnitType.bag:
            name = "SET";
            break;
        case UnitType.set:
            name = "SET";
            break;
    }

    return name;
}

Date.prototype.addHours = function (h) {
    this.setHours(this.getHours() + h);
    return this;
}

Date.prototype.addMinutes = function (m) {
    this.setMinutes(this.getMinutes() + m);
    return this;
}

Date.prototype.addDays = function (days) {
    var date = new Date(this.valueOf());
    date.setDate(date.getDate() + days);
    return date;
}

Date.prototype.addMonths = function (months) {
    var date = new Date(this.valueOf());
    date.setMonth(date.getMonth() + months);
    return date;
}

var isMobile = {
    Android: function () {
        return navigator.userAgent.match(/Android/i);
    },
    BlackBerry: function () {
        return navigator.userAgent.match(/BlackBerry/i);
    },
    iOS: function () {
        return navigator.userAgent.match(/iPhone|iPad|iPod/i);
    },
    Opera: function () {
        return navigator.userAgent.match(/Opera Mini/i);
    },
    Windows: function () {
        return navigator.userAgent.match(/IEMobile/i) || navigator.userAgent.match(/WPDesktop/i);
    },
    any: function () {
        return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows());
    }
};

const _MS_PER_DAY = 1000 * 60 * 60 * 24;

// a and b are javascript Date objects
function dateDiffInDays(a, b) {
    // Discard the time and time-zone information.
    const utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());
    const utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());

    return Math.floor((utc2 - utc1) / _MS_PER_DAY);
}

function formatDate(date) {
    var d = new Date(date),
        month = '' + (d.getMonth() + 1),
        day = '' + d.getDate(),
        year = d.getFullYear();

    if (month.length < 2) month = '0' + month;
    if (day.length < 2) day = '0' + day;

    return [year, month, day].join('-');
}

function time_ago(time) {
    switch (typeof time) {
        case 'number':
            break;
        case 'string':
            time = +new Date(time);
            break;
        case 'object':
            if (time.constructor === Date) time = time.getTime();
            break;
        default:
            time = +new Date();
    }
    var time_formats = [
        [60, 'seconds', 1], // 60
        [120, '1 minute ago', '1 minute from now'], // 60*2
        [3600, 'minutes', 60], // 60*60, 60
        [7200, '1 hour ago', '1 hour from now'], // 60*60*2
        [86400, 'hours', 3600], // 60*60*24, 60*60
        [172800, 'Yesterday', 'Tomorrow'], // 60*60*24*2
        [604800, 'days', 86400], // 60*60*24*7, 60*60*24
        [1209600, 'Last week', 'Next week'], // 60*60*24*7*4*2
        [2419200, 'weeks', 604800], // 60*60*24*7*4, 60*60*24*7
        [4838400, 'Last month', 'Next month'], // 60*60*24*7*4*2
        [29030400, 'months', 2419200], // 60*60*24*7*4*12, 60*60*24*7*4
        [58060800, 'Last year', 'Next year'], // 60*60*24*7*4*12*2
        [2903040000, 'years', 29030400], // 60*60*24*7*4*12*100, 60*60*24*7*4*12
        [5806080000, 'Last century', 'Next century'], // 60*60*24*7*4*12*100*2
        [58060800000, 'centuries', 2903040000] // 60*60*24*7*4*12*100*20, 60*60*24*7*4*12*100
    ];
    var seconds = (+new Date() - time) / 1000,
        token = 'ago',
        list_choice = 1;

    if (seconds == 0) {
        return 'Just now'
    }
    if (seconds < 0) {
        seconds = Math.abs(seconds);
        token = 'from now';
        list_choice = 2;
    }

    var i = 0,
        format;
    while (format = time_formats[i++])
        if (seconds < format[0]) {
            if (typeof format[2] == 'string')
                return format[list_choice];
            else
                return Math.floor(seconds / format[2]) + ' ' + format[1] + ' ' + token;
        }
    return time;
}
var outletType = [
    { id: 1, name: 'Squid Boy' },
    { id: 2, name: 'Squid Boy Express' }
];

var StatusList = [
    { id: 1, name: 'Active' },
    { id: 2, name: 'Terminated' }
]

var productCategory = [
    { id: 1, name: 'Frozen' },
    { id: 2, name: 'Ambient' },
    { id: 3, name: 'Utensils' }
]

var productUnitType = [
    { id: 1, name: 'SVG' },
    { id: 2, name: 'PACK' },
    { id: 3, name: 'PCS' },
    { id: 4, name: 'BTL' },
    { id: 5, name: 'CTN' },
    { id: 6, name: 'ROLL' },
    { id: 7, name: 'BUNDLES' },
    { id: 8, name: 'BOX' },
    { id: 9, name: 'BAG' },
    { id: 10, name: 'SET' },
]

var promotionStatusList = [
    { id: 1, name: 'Active' },
    { id: 0, name: 'Expired' }
]

var orderStatusList = [
    { id: 0, name: 'Draft' },
    { id: 1, name: 'New' },
    { id: 2, name: 'Proccessing' },
    { id: 3, name: 'Waiting for Payment' },
    { id: 4, name: 'Pending Payment Verification' },
    { id: 5, name: 'Payment Verification Failed' },
    { id: 6, name: 'Waiting for Pick Up' },
    { id: 7, name: 'Pick Up for Delivery' },
    { id: 8, name: 'Delivered' }
]
const HttpCode = {
    "error": 0,
    "success": 1,
    "noRecordFound": 2,
}

const UserRole = {
    "systemAdmin": 1,
    "admin": 2,
    "subPartner": 3,
}

const ModuleRight = {
    "systemUserView": 1,
    "systemUserAdd": 2,
    "systemUserEdit": 3,
    "systemUserDelete": 4,

    "subPartnerView": 5,
    "subPartnerAdd": 6,
    "subPartnerEdit": 7,
    "subPartnerDelete": 8,

    "outletView": 9,
    "outletAdd": 10,
    "outletEdit": 11,
    "outletDelete": 12,

    "productView": 13,
    "productAdd": 14,
    "productEdit": 15,
    "productDelete": 16,

    "orderView": 17,
    //"orderAdd": 18,
    "orderManage": 19,
    "orderDelete": 20,

    "monthlySalesView": 21,
    "monthlySalesAdd": 22,
    "monthlySalesEdit": 23,
    "monthlySalesDelete": 24,

    "dailySalesView": 25,
    "dailySalesAdd": 26,
    "dailySalesEdit": 27,
    "dailySalesDelete": 28,

    "aPView": 29,
    "aPAdd": 30,
    "aPEdit": 31,
    "aPDelete": 32,
}

const EmailActionType = {
    "verifyEmail": 1,
    "changePassword": 2
}

const OrderStatus = {
    "draft": 0,
    "new": 1,
    "proccessing": 2,
    "waitingForPayment": 3,
    "pendingForPaymentVerification": 4,
    "paymentVerificationFailed": 5,
    "waitingForPickUp": 6,
    "pickUpForDelivery": 7,
    "delivered": 8,
    "other":9
}

const MonthlyReportStatus = {
    "draft": 0,
    "submitted": 1
}

const AuditTrailAction = {
    "add": 1,
    "edit": 2,
    "delete": 3,
    "submit": 4,
    "create": 5
}

const NotificationType = {
    "submitOrder": 1,
    "updateOrderStatus": 2,
    "submitPaymentSlip": 3,
    "orderPaymentReminder": 4,
    "monthlySalesReminder": 5,
    "newMonthlyReport": 6,
    "monthlyReportSubmmited": 7,
}


const UnitType = {
    "svg": 1,
    "pack": 2,
    "pcs": 3,
    "btl": 4,
    "ctn": 5,
    "roll": 5,
    "bundles": 5,
    "box": 5,
    "bag": 5,
    "set": 5,
}


const Category = {
    "frozen": 1,
    "ambient": 2,
    "utensils": 3,
}

com = {
    str : {
        _KEY: "8yBKD#Dq#c4h?skFsdeVnWt5fMdFZt3E",
        _IV: "Ps9Qjcor3B6z2Spt",
        encrypt: function (str) {
            var key = CryptoJS.enc.Utf8.parse(this._KEY);
            var iv = CryptoJS.enc.Utf8.parse(this._IV);

            var encrypted = '';

            var srcs = CryptoJS.enc.Utf8.parse(str);
            encrypted = CryptoJS.AES.encrypt(srcs, key, {
                iv: iv,
                mode: CryptoJS.mode.CBC,
                padding: CryptoJS.pad.Pkcs7
            });

            return encrypted.ciphertext.toString();
        },
        decrypt: function (str) {
            var key = CryptoJS.enc.Utf8.parse(this._KEY);
            var iv = CryptoJS.enc.Utf8.parse(this._IV);
            var encryptedHexStr = CryptoJS.enc.Hex.parse(str);
            var srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
            var decrypt = CryptoJS.AES.decrypt(srcs, key, {
                iv: iv,
                mode: CryptoJS.mode.CBC,
                padding: CryptoJS.pad.Pkcs7
            });
            var decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
            return decryptedStr.toString();
        }
    }
}
sbApp.factory('SharedService', ['$http', '$q', function ($http, $q) {
    let apiUrl = "";
    let apiToken = "";
    let userName = "";
    let moduleRights = "";
    let userRole = "";
    let userId = 0;
    return {
        getApiUrl: function () {
            if (apiUrl == "") {
                apiUrl = com.str.decrypt($("#hfURL").val());
            }
            return apiUrl;
        },
        getUserRole: function () {
            if (userRole == "") {
                if (localStorage.getItem('sb-user-role') != null)
                    userRole = com.str.decrypt(localStorage.getItem('sb-user-role'));
            }
            return userRole;
        },
        setUserRole: function (role) {
            userRole = role;
            localStorage.setItem('sb-user-role', com.str.encrypt(role));
            return userRole;
        },
        getModuleRights: function () {
            if (moduleRights == "") {
                if (localStorage.getItem('sb-module-right') != null)
                    moduleRights = com.str.decrypt(localStorage.getItem('sb-module-right'));
            }
            return moduleRights;
        },
        setModuleRights: function (right, isFullRight) {
            if (isFullRight != null && isFullRight == 1) {
                moduleRights = "full-right";
                localStorage.setItem('sb-module-right', com.str.encrypt("full-right"));
            }
            else {
                moduleRights = right;
                localStorage.setItem('sb-module-right', com.str.encrypt(right));
            }
            return moduleRights;
        },
        getUserIsFullRights: function () {
            this.getModuleRights();
            this.getUserRole();

            if (moduleRights == "full-right" || userRole == UserRole.systemAdmin) {
                return true;
            }
            return false;
        },
        getApiToken: function () {
            if (localStorage.getItem('sb-apiToken') != null)
                apiToken = com.str.decrypt(localStorage.getItem('sb-apiToken'));
            return apiToken;
        },
        setApiToken: function (token) {
            apiToken = token;
            localStorage.setItem('sb-apiToken', com.str.encrypt(token));
            return apiToken;
        },
        setApiTokenExpiredDate: function (date) {
            localStorage.setItem('sb-token-expired', date);
            return apiToken;
        },
        getApiTokenExpiredDate: function () {
            if (localStorage.getItem('sb-token-expired') != null)
                return new Date(localStorage.getItem('sb-token-expired'));
            return null;
        },
        getUserId: function () {
            if (userId == "") {
                if (localStorage.getItem('sb-u-id') != null)
                    userId = com.str.decrypt(localStorage.getItem('sb-u-id'));
            }
            return userId;
        },
        setUserId: function (id) {
            userId = id;
            localStorage.setItem('sb-u-id', com.str.encrypt(id));
            return userId;
        },
        getUserName: function () {
            if (userName == "") {
                if (localStorage.getItem('sb-name') != null)
                    userName = com.str.decrypt(localStorage.getItem('sb-name'));
            }
            return userName;
        },
        setUserName: function (name) {
            userName = name;
            localStorage.setItem('sb-name', com.str.encrypt(name));
            return userName;
        },
        getLanguage: function () {

        },
        getCreateSuccessMessage: function () {
            return "02931933b4db4bb2affccdf4b0a215d3";
        },
        getSubmittedSuccessMessage: function () {
            return "4b0a215d3b4db4bbc0292affc3df3193";
        },
        getUpdateSuccessMessage: function () {
            return "726cb85f6eff4689b940e35ea1dcb75d";
        },
        signOut: function () {
            localStorage.removeItem('sb-apiToken');
            localStorage.removeItem('sb-module-right');
            localStorage.removeItem('sb-user-role');
            localStorage.removeItem('sb-name');
            localStorage.removeItem('sb-u-id');
            localStorage.removeItem('sb-token-expired');
        }
    };
}]);
