
require("../vendors/toastr.js")
var toastr = require("../vendors/toastr.js")

module.exports = function () {
    var messagePatterns = {
        getList: {
            error: 'دریافت اطلاعات فهرست __ با خطا مواجه شده است'
        },
        getSelectList: {
            error: 'دریافت اطلاعات فهرست انتخاب __ با خطا مواجه شده است'
        },
        get: {
            error: 'دریافت اطلاعات __ با خطا مواجه شده است'
        },
        post: {
            success: 'عملیات ثبت __ جدید با موفقیت انجام شد',
            error: 'عملیات ثبت __ جدید با خطا متوقف شد'
        },
        postUpdate: {
            success: 'عملیات ثبت __  با موفقیت انجام شد',
            error: 'عملیات ثبت __  با خطا متوقف شد'
        },
        putUpdate: {
            success: 'عملیات بروزرسانی __  با موفقیت انجام شد',
            error: 'عملیات بروزرسانی __  با خطا متوقف شد'
        },
        custom: {
            success: 'عملیات  __  با موفقیت انجام شد',
            error: 'عملیات  __  با خطا متوقف شد'
        },
        put: {
            success: 'عملیات ویرایش __ با موفقیت انجام شد',
            error: 'عملیات ویرایش __ با خطا متوقف شد'
        },
        del: {
            confirm: 'آیا از حذف رکورد __ اطمینان دارید؟',
            success: 'عملیات حذف __ با موفقیت انجام شد',
            error: 'عملیات حذف __ با خطا متوقف شد'
        },
        delrange: {
            confirm: 'آیا از حذف  __ اطمینان دارید؟',
            success: 'عملیات حذف __ با موفقیت انجام شد',
            error: 'عملیات حذف __ با خطا متوقف شد'
        },
        cond: {
            confirm: 'آیا از  __ اطمینان دارید؟',
        },
        validation: {
            error: '{propertyName} باید منحصر به فرد باشد'
        }
    };
    var entities = {
        User: {
            plural: 'کاربران',
            singular: 'کاربر',
            UserAccess: 'سمت کاربر',
            UserAccessList: 'سمت های کاربر',
            AccessList: 'سمت ها',
            CompanyList: 'گروه و شرکت',
            ResetPassword: 'رمز عبور کاربر',
            StateType: 'وضعیت کاربر',
            StateFalse: 'غیرفعال کردن کاربر',
            StateTrue: 'فعال کردن کاربر',
            UnlockUser: 'فعالسازی حساب کاربری'
        },
        Company: {
            plural: 'گروه/شرکت',
            singular: 'گروه/شرکت',
            StateType: 'وضعیت گروه/شرکت',
            UserState: 'وضعیت کاربر گروه/شرکت',
            StateFalse: 'غیرفعال کردن گروه/شرکت',
            StateTrue: 'فعال کردن گروه/شرکت',
            GroupCompanies: 'شرکت های تابعه'
        },
        ActionLog: {
            plural: 'فعالیت های کاربران',
            singular: 'گزارشات فعالیت کاربر',
        },
        Access: {
            plural: 'دسترسی ها',
            singular: 'دسترسی',
            PermissionList: 'مجوز ها',
        },
        Period: {
            plural: 'دوره های مالی',
            singular: 'دوره مالی',
            PeriodSummary: 'حذف دوره  مالی',
            CopyDependencies: 'کپی دوره مالی',
            PeriodArchive: 'وضعیت بایگانی دوره مالی',
            CopyPeriod: 'کپی دوره مالی و ضمایم منتخب آن',
            Comparatives: 'تنظیم مقایسه ای دوره ها',
            PeriodClosed: 'وضعیت دوره مالی',
            StateType: 'وضعیت فعالیت دوره مالی',
            StateFalse: 'غیرفعال کردن دوره مالی',
            StateTrue: 'فعال کردن دوره مالی',
            SavedMagazines: 'مجله های ذخیره شده',
            SubmitState: 'وضعیت ارسال دوره مالی'
        },
        AdjustmentDocument: {
            plural: 'اسناد اصلاحی و طبقه بندی',
            singular: 'سند اصلاحی و طبقه بندی',
            Pdf: 'تولید فایل Pdf',
            ConfirmationType: 'تایید سند اصلاحی و طبقه بندی',
            ConfirmationTypes: 'تایید اسناد اصلاحی و طبقه بندی',
            StateType: 'وضعیت سند اصلاحی و طبقه بندی',
            StateTypes: 'وضعیت اسناد اصلاحی و طبقه بندی',
            ConfirmTypes: 'تایید __ سند اصلاحی و طبقه بندی',
            UnConfirmType: 'عدم تایید سند اصلاحی و طبقه بندی',
            UnConfirmTypes: 'عدم تایید اسناد اصلاحی و طبقه بندی',
            Lastpriority: 'آخرین شماره اولویت سند اصلاحی و طبقه بندی',
            StateFalse: 'غیرفعال کردن سند اصلاحی و طبقه بندی',
            StateTrue: 'فعال کردن سند اصلاحی و طبقه بندی',
            Copy: 'کپی سند اصلاحی و طبقه بندی',
            Copies: 'کپی اسناد اصلاحی و طبقه بندی',
            ChangeOrder: 'اولویت سند اصلاحی و طبقه بندی',
        },
        AdjustmentDocumentItem: {
            plural: 'بند سند اصلاحی و طبقه بندی',
            singular: 'بند سند اصلاحی و طبقه بندی',
            ChangeOrder: 'اولویت بند سند اصلاحی و طبقه بندی',
            StateFalse: 'غیرفعال کردن بند سند اصلاحی و طبقه بندی',
            StateTrue: 'فعال کردن بند سند اصلاحی و طبقه بندی',
            StateType: 'وضعیت بند سند اصلاحی و طبقه بندی',
            StateTypes: 'وضعیت بند های سند اصلاحی و طبقه بندی',
        },
        Tree: {
            plural: 'درختواره ها',
            singular: 'درختواره',
            Fiscal: 'درخت های مالی',
            ImportExcel: 'ورود داده های درختواره',
            NodeDelete: 'حذف گره درختواره',
            NodesDelete: 'حذف گره های درختواره',
            ToBranch: 'تبدیل برگ به شاخه',
            ToLeaf: 'تبدیل شاخه به برگ',
            Copy: 'کپی گره های درختواره',
            Cut: 'انتقال گره های درختواره',
            UpdateNode: 'ویرایش گره های درختواره',
            AcceptAllSyncTree: 'بروزرسانی درختواره',
            RejectAllSyncTree: 'لغو بروزرسانی درختواره',
            AcceptListSyncTree: 'اعمال گره های انتخاب شده',
            RejectListSyncTree: 'لغو گره های انتخاب شده',
            ResetConsolidationBranch: 'بازگشت به تنظیمات اولیه شاخه',
            ResetConsolidationTree: 'بازگشت به تنظیمات اولیه درختواره',
            SaveSettingNode: 'ذخیره تنظیمات درختواره',
        },
        GroupPeriod: {
            plural: ' صورت های مالی شرکت های تابعه',
            singular: 'صورت های مالی شرکت های تابعه',
            PeriodDetail: 'گزارشات همراه دوره مالی',
            SubmitState: 'وضعیت ارسال دوره مالی شرکت تابعه'
        },
        TableTemplate: {
            plural: 'قالب های جدول',
            singular: 'قالب جدول',
            Copy: 'کپی قالب جدول',
            Preview: 'پیش نمایش قالب جدول',
            Excel: 'تولید فایل اکسل قالب جدول',
            Priority: 'جابه جایی اولویت قالب های جدول',
            ImportBackUp: 'بارگذاری قالب های جدول',
            ExportFile: 'تولید فایل پشتیبان',
            ChangeOrder: 'اولویت قالب جدول',
            PreviewDefault: 'تنظیمات پیش نمایش',

        },
        Consolidate: {
            plural: 'شرکت های مشمول تلفیق',
            singular: 'شرکت مشمول تلفیق',
            SelectivePeriods: 'ویرایش شرکت های مشمول تلفیق',
            PostConsolidate: 'تغییرات شرکت های مشمول تلفیق',
            Ownership: 'تعیین درصد مالکیت مستقیم'
        },
        Balancesheet: {
            plural: ' فایل های تراز',
            singular: ' فایل تراز',
            Excel: 'تولید خروچی فایل اکسل'
        },
        DynamicTable: {
            plural: 'جدول های داده',
            singular: 'جدول داده',
            LastPriority: 'آخرین شماره اولویت جدول داده',
            ChangeOrder: 'تغییر اولویت جدول داده',
            ImportExcel: 'بارگذاری شمای جدول',
            Archive: 'بایگانی جدول داده',
            UnArchive: 'لغو بایگانی جدول داده',
            Archives: 'بایگانی جدول های داده',
            UnArchives: 'لغو بایگانی جدول های داده',
            Copy: 'کپی شمای جدول',
        },
        DynamicTableData: {
            plural: 'داده های جدول',
            singular: 'داده جدول',
            ExportExcel: 'دریافت فایل خروجی داده های جدول',
            ImportExcel: 'بارگذاری داده جدول از اکسل',
            StateType: 'وضعیت داده جدول',
            StateTypes: 'وضعیت داده های جدول',
        },
        DynamicDocument: {
            plural: 'روال های محاسبه',
            singular: 'روال محاسبه',
            TableList: 'چدول های داده',
            LastCode: 'اولیه روال محاسبه',
            StateType: 'وضعیت روال محاسبه',
            StateTypes: 'وضعیت روال های محاسبه',
            CalculateDocument: 'اجرای روال',
            CalculateDocuments: 'اجرای روال ها',
            Copy: 'کپی روال محاسبه',
            Copies: 'کپی روال های محاسبه',
            StopCalculateDocuments: 'لغو محاسبه روال ها',
            DeleteCalculateDocument: 'حذف اثر اجرای روال',
            DeleteCalculateDocuments: 'حذف اثر اجرای روال ها',
            StateFalse: 'غیرفعال کردن روال محاسبه',
            StateTrue: 'فعال کردن روال محاسبه',

        },
        SourceTableData: {
            plural: 'جدول تراز مبدا',
            singular: 'جدول تراز مبدا'
        },
        ExpenseCenterTableData: {
            plural: 'جدول',
            singular: 'جدول'
        },
        TableStructure: {
            plural: '',
            singular: '',
            Consolidated: 'گروه/ شرکتهای تابعه',
        },
        ReportGenerator: {
            plural: '',
            singular: 'استایل سفارشی',
            CustomStyle: 'استایل سفارشی',
        },
        TotalBalanceReportData: {
            plural: 'ستون مانده نهایی',
            singular: ''
        },
        BalancesheetContent: {
            plural: 'محتوای فایل تراز',
            singular: ''
        },
        MapData: {
            plural: 'محتوای فایل تراز',
            singular: '',
            SelectCollection: "فهرست انتخاب گروهی"
        },
        BalanceReport: {
            plural: 'گزارش تراز حساب ها/کاربرگ 6020',
            singular: ''
        },
        Magazine: {
            plural: 'مجله ها',
            singular: 'مجله'
        },
        NodeValuePart: {
            plural: 'مقادیر گره متناظر در شرکت های مشمول',
            singular: ''
        },
        TableTemplateSelect: {
            plural: 'قالب های جدول',
            singular: 'قالب جدول'
        },
        Connection: {
            plural: 'ارتباط دریافت داده',
            singular: 'ارتباط دریافت داده',
            CompleteRun: 'نتایج'
        },
        Folder: {
            plural: 'پوشه ها',
            singular: 'پوشه',
        },
        SubstituteNode: {
            plural: 'حساب های متقابل',
            singular: 'حساب متقابل',

        },
        MappingRule: {
            plural: 'الگوهای نگاشت',
            singular: 'الگوی نگاشت',
            applyMappingRule: 'اجرای الگوی نگاشت',
            applyMappingRules: 'اجرای الگوهای نگاشت',
            cancelMappingRule: 'لغوالگوی نگاشت',
            cancelMappingRules: 'لغو الگوهای نگاشت',
            ChangeOrder: 'اولویت الگوی نگاشت',
        },
        MappingRuleData: {
            plural: 'نتایج الگوهای نگاشت',
            singular: 'نتایج الگوی نگاشت',
        },
        MappingSrc: {
            plural: '',
            singular: '',
            applyAutoMapping: 'نگاشت اتوماتیک',
        },
        CompanyDyanamic: {
            plural: '',
            singular: 'طراحی گزارش',
        },
        CompanyInfo: {
            plural: '',
            singular: 'گزارش',
        },
        CustomStyle: {
            plural: '',
            singular: 'استایل'
        },
        XbrlConcept: {
            plural: '',
            singular: 'گزارش XBRL',
        },
        CompanyInfoData: {
            plural: '',
            singular: 'اطلاعات گزارش',

        },
    };
    var getPattern = function (key, type) {
        var ar = messagePatterns[key];
        return ar[type];
    }
    var getEntitiesValue = function (entityName, actionType, key) {
        var entity = entities[entityName];
        if (key === null || key === undefined) {
            if (actionType === "put" || actionType === "post" || actionType === "del"
                || actionType === "get")
                return entity["singular"];
            if (actionType === "getList" || actionType === "getSelectList" || actionType === "delrange")
                return entity["plural"];
        } else
            return entity[key];
    }
    var createMessage = function (entityName, actionType, key, messageType) {
        var pat = getPattern(actionType, messageType);
        var enKey = getEntitiesValue(entityName, actionType, key);
        return pat.replace("__", enKey);
    }
    var createVMessage = function (param) {
        var pat = messagePatterns["validation"].error;
        var propVal = _h.getLocalizedText(param[2]);
        pat = pat.replace("{propertyName}", propVal);
        // var placeHolder = "";
        // if (param.length > 3) 
        //     placeHolder = _h.getLocalizedText(param[3]);
        // pat = pat.replace("{PlaceHolder}", placeHolder);

        return pat;
    }
    var getToaster = function (type) {
        switch (type) {
            case "error":
                toastr.options = {
                    "newestOnTop": false,
                    "positionClass": "toast-top-left",
                    "closeButton": false,
                    "toastClass": "animated fadeInDown"
                };
                break;
            case "success":
                toastr.options = {
                    "newestOnTop": false,
                    "positionClass": "toast-bottom-left",
                    "closeButton": false,
                    "toastClass": "animated fadeInDown"
                };
                break;
            case "warning":
                toastr.options = {
                    "newestOnTop": false,
                    "positionClass": "toast-bottom-left",
                    "closeButton": false,
                    "toastClass": "animated fadeInDown"
                };

                break;
        }
        toastr.options.rtl = true;
        return toastr;
    }
    var warning = function (name, actionType, key) {
        var message = createMessage(name, actionType, key, "warning");
        getToaster("warning").warning(message);
    }
    var success = function (name, actionType, key) {
        var message = createMessage(name, actionType, key, "success");
        getToaster("success").success(message);
    }
    var error = function (name, actionType, key) {
        var message = createMessage(name, actionType, key, "error");
        getToaster("error").error(message);
    }
    var custom = function (type, message) {
        switch (type) {
            case "success":
                getToaster(type).success(message);
                break;
            case "error":
                getToaster(type).error(message);
                break;
            case "warning":
                getToaster(type).warning(message);
                break;
        }
    }
    return {
        getEntitiesValue: getEntitiesValue,
        createMessage: createMessage,
        createVMessage: createVMessage,
        warning: warning,
        success: success,
        error: error,
        custom: custom
    }
}();





