// function getPatternSectionName(company) {
//     switch (company){
//         case "farazsms": return "ارسال بر اساس پترن";
//         case "smsdotir": return "لیست قالب‌ها";
//     }
//     return "ارسال با الگو";
// }

// function getAddPatternBtnName(company) {
//     switch (company){
//         case "farazsms": return "جدید";
//         case "smsdotir": return "افزودن قالب";
//     }
//     return "افزودن جدید";
// }

function getAdminsSmsTemplateByCompanyAndCode(company,code) {
    
    let message = "";
    switch (code){

        case "successful_payment":
            message = "[پرداخت موفق]\nکاربر %user_name% به آیدی %user_id% یک پرداخت موفق به مبلغ %amount% تومان برای %purchase_type% انجام داد.\nنام اپلیکیشن یا وبسایت";
            break;
        case "working_order":
            message = "[سفارش دریافت شد]\nاز کاربر %user_name% یک سفارش به شناسه %order_id% دریافت شد.\nنام اپلیکیشن یا وبسایت";
            break;
        case "waiting_order":
            message = "[سفارش در انتظار پرداخت]\nکاربر %user_name% یک سفارش به شناسه %order_id% ثبت کرد که در وضعیت در انتظار پرداخت قرار دارد.\nنام اپلیکیشن یا وبسایت";
            break;
        case "canceled_order":
            message = "[لغو سفارش توسط ادمین]\nسفارش به شناسه %order_id% که مربوط به کاربر %user_name% بود، توسط ادمین لغو شد.\nنام اپلیکیشن یا وبسایت";
            break;
        case "canceled_byuser_order":
            message = "[لغو سفارش توسط کاربر]\nکاربر %user_name% درخواست لغو سفارش خود به شماره %order_id% را ثبت کرد.\nنام اپلیکیشن یا وبسایت";
            break;
        case "return_req_byuser_order":
            message = "[درخواست مرجوعی سفارش توسط کاربر]\nکاربر %user_name% درخواست مرجوعی برای سفارش خود به شماره %order_id% را ثبت کرد.\nنام اپلیکیشن یا وبسایت";
            break;

    }

    let finalMessage = "";
    if(company == "smsdotir"){
        finalMessage = message.replace(/%/g, "#");
    }else{
        finalMessage = message;
    }

    return finalMessage;

}

const smsAdminNotifsHelpBtn = function () {

    let sms_title = $(this).data('sms-title');
    let sms_type = $(this).data('sms-type');
    let provider_code = $('#active_provider_code').data('active-provider-code');
    let htmlHelp = '';

    htmlHelp = `
    <div class="new-gen-helper-sa2">

        <div class="nghs-header">راهنمای تکمیل الگو پیامک <span class="nhst">`+sms_title+`</span></div>
        <div class="nghs-title">
            1. کپی متن پیامک با متغییر
        </div>
        <span class="minitext">متن زیر برای ارسال پیامک `+sms_title+` نوشته شده است که می‌توانید آن‌را با توجه به نیاز خود تغییر دهید اما مقدار متغییر های موجود در متن را تغییر ندهید. از بخش زیر میتوانید متن را کپی نمایید:</span>
        <textarea disabled class="minitextareasms" rows="4">`+getAdminsSmsTemplateByCompanyAndCode(provider_code,sms_type)+`</textarea>
        <div class="nghs-imp-note">نکته مهم: در متن پیامک بالا مقدار متغییر های انگلیسی وارد شده و ترتیب آن‌ها را تغییر ندهید همچنین دقت کنید متغییر ها با حروف کوچک انگلیسی هستند و فقط شما متن‌های فارسی را با توجه به سلیقه و کسب و کار خود نیاز است تغییر دهید.</div>
        <div class="nghs-title">
            2. درج متن کپی شده در پنل پیامکی
        </div>
        <span class="minitext">وارد ناحیه کاربری پنل پیامکی خود شوید و وارد بخش `+getPatternSectionName(provider_code)+` شوید و بروی دکمه `+getAddPatternBtnName(provider_code)+` مطابق تصویر زیر کلیک نمایید و سپس متن کپی شده خود را در بخش قالب درج و قالب (الگو) خود را ذخیره نمایید.</span>
        <div class="nghsaiw"><img class="nghsa-img" src="`+mpPanelBaseUrl+`/core/_dist/img/sms_providers/sms_`+provider_code+`_pattern_def.jpg"></div>
        <div class="nghs-title">
            3. کپی کد مربوط به الگوی تعریف شده
        </div>
        <span class="minitext">مطابق تصویر راهنمای زیر کد الگو (قالب یا پترن) را از پنل شرکت پیامکی خود کپی کنید:</span>
        <div class="nghsaiw"><img class="nghsa-img" src="`+mpPanelBaseUrl+`/core/_dist/img/sms_providers/sms_`+provider_code+`_pattern_copy.jpg"></div>
        <div class="nghs-title">
            4. درج کد در پنل ماجوریس
        </div>
        <span class="minitext">کد کپی شده را در همین بخش اعلان به کاربران درج و ذخیره نمایید:</span>
        <div class="nghsaiw"><img class="nghsa-img" src="`+mpPanelBaseUrl+`/core/_dist/img/sms_providers/sms_`+provider_code+`_pattern_final_save.jpg"></div>

    </div>
    `;

    Swal.fire({
        html: htmlHelp,
        width: '800px',
        confirmButtonText: 'متوجه شدم',
        showClass: {
            popup: 'animated fadeInUp faster'
        },
        hideClass: {
            popup: 'animated fadeOutDown faster'
        },
        customClass: {
            htmlContainer: 'swal-scroll-wrapper'
        }
    });

};

function saveAdminNotifsChanges(obj) {

    let card = obj.parent().parent().parent().parent();
    card.addClass("collapsed-card");
    card.find('.all_json_admin_notifs_edit_btn').show();

    let card_body = obj.parent().parent().parent();
    card_body.slideUp();

    let pattern = card_body.find('.js_pattern_txt').val();
    let sms_number = card_body.find('.js_sms_number_txt').val();
    let active  = parseInt(card_body.find('.js_active').val());
    let method  = card_body.find('.js_method').val();

    let id = $(card.find('.json_admin_notifs_id')).html();

    let main_json_text = $('#admin_notifs').val();
    if (main_json_text == '') {
        mainJsonAdminNotifsArrayObj = [];
    } else {
        mainJsonAdminNotifsArrayObj = JSON.parse(main_json_text);
    }

    let index = -1;
    for (let i = 0; i < mainJsonAdminNotifsArrayObj.length; i++) {
        if (mainJsonAdminNotifsArrayObj[i]['id'] == id) {
            index = i;
            break;
        }
    }

    if (index >= 0) {
        if(mainJsonAdminNotifsArrayObj[index]['active'] != active){
            let showactive = card.find('.json_admin_notifs_showactive');
            if (active == 1) {
                showactive.removeClass('admin-notifs-deactive');
                showactive.addClass('admin-notifs-active');
                showactive.html('فعال');
            } else {
                showactive.removeClass('admin-notifs-active');
                showactive.addClass('admin-notifs-deactive');
                showactive.html('غیرفعال');
            }
        }

        if(mainJsonAdminNotifsArrayObj[index]['method'] != method){
            let showmethod = card.find('.json_admin_notifs_showmethod');
            if (method == "telegram") {
                showmethod.removeClass('admin-notifs-sms');
                showmethod.addClass('admin-notifs-telegram');
                showmethod.html('تلگرام');
            } else {
                showmethod.removeClass('admin-notifs-telegram');
                showmethod.addClass('admin-notifs-sms');
                showmethod.html('پیامک');
            }
        }

        mainJsonAdminNotifsArrayObj[index]['pattern'] = pattern;
        mainJsonAdminNotifsArrayObj[index]['sms_number'] = sms_number;
        mainJsonAdminNotifsArrayObj[index]['active']  = active;
        mainJsonAdminNotifsArrayObj[index]['method']  = method;

        $('#admin_notifs').val(JSON.stringify(mainJsonAdminNotifsArrayObj));
        
    }
}
function jsonAdminNotifsArraySubmitBtn() {
    saveAdminNotifsChanges($(this));
}

function methodChanged(){
    let selectedMethod = $(this).val();
    let adminSpecFields    = $(this).closest('.dynamic-admin-notifs-params').find('.sms-admin-spec-fields');
    if(selectedMethod == 'telegram'){
        adminSpecFields.slideUp();
    } else if(selectedMethod == 'sms') {
        adminSpecFields.slideDown();
    } else {
        adminSpecFields.slideUp();
    }
}

let editJsonAdminNotifsRowsBtn = function () {

    let root_card = $(this).parent().parent().parent();
    root_card.find('.card-body').show('slideDown');
    $(this).hide();

};

const jsonAdminNotifsCancelBtn = function () {

    let card = $(this).closest('.json_admin_notifs_card');
    card.find('.all_json_admin_notifs_edit_btn').show();
    card.addClass("collapsed-card");
    let card_body = card.find('.card-body');
    card_body.slideUp();

};

function jsonAdminNotifsRowHtmlMacker(json) { // don't use ids because ids can't be repeated in DOM
    let htmlRow = "";

    htmlRow += '<div class="json_admin_notifs_card card card-outline card-json-item collapsed-card global-json-handler-card">';
    htmlRow += '<div class="card-header json_admin_notifs_box">';
    htmlRow += '<div class="info-container">';
    htmlRow += '<span class="json_admin_notifs_id">' + (json?.id ?? "") + '</span>';
    htmlRow += '<span class="json_admin_notifs_showtitle">' + (json?.title ?? "-") + '</span>';
    htmlRow += '<span class="json_admin_notifs_showtype">' + (json?.type ?? "-") + '</span>';

    if (json) {
        htmlRow += (json['active']
            ? '<span class="json_admin_notifs_showactive admin-notifs-active">فعال</span>'
            : '<span class="json_admin_notifs_showactive admin-notifs-deactive">غیرفعال</span>'
        );
        
        htmlRow += (json['method'] === "telegram"
            ? '<span class="json_admin_notifs_showmethod admin-notifs-telegram">تلگرام</span>'
            : '<span class="json_admin_notifs_showmethod admin-notifs-sms">پیامک</span>'
        );
    }

    htmlRow += '</div>';
    htmlRow += '<div class="card-tools2">';
    htmlRow += '<button type="button" class="all_json_admin_notifs_edit_btn edit-small-btn2 btn btn-primary btn-sm"><i class="ph ph-pencil"></i></button>';
    htmlRow += '</div>';
    htmlRow += '</div>';

    // Card Body
    htmlRow += '<div class="card-body" style="display: none;">';
    htmlRow += '<div style="display: none;" class="static-admin-notifs-params bottom20">';
    htmlRow += '<span>شناسه: ' + (json?.id ?? "") + '</span><br>';
    htmlRow += '<span>کد : ' + (json?.type ?? "") + '</span><br>';
    htmlRow += '<span>عنوان: ' + (json?.title ?? "") + '</span>';
    htmlRow += '</div>';

    // Dynamic Section
    htmlRow += '<div class="dynamic-admin-notifs-params">';

    let activeOptions = {
        0: "غیرفعال",
        1: "فعال"
    };
    htmlRow += rowOptionsInputHtmlGenerator(json?.active, activeOptions, "js_active", "وضعیت این اعلان");

    let methodOptions = {
        "telegram": "تلگرام",
        "sms": "پیامک"
    };
    htmlRow += rowOptionsInputHtmlGenerator(json?.method, methodOptions, "js_method", "روش ارسال پیام");

    // Input fields with conditional disabling
    let patternDisabled = json?.method === "telegram" ? "disabled" : "";
    let smsNumberDisabled = json?.method === "telegram" ? "disabled" : "";

    let hideAdminSpecF = '';
    if(json['method'] === "telegram") hideAdminSpecF = 'style="display:none"';

    htmlRow += '<div class="sms-admin-spec-fields" '+hideAdminSpecF+'>';
    htmlRow += '<div class="sms-help-btn-wrapper"><button class="btn btn-sm btn-warning btn-san-help" data-sms-title="'+json['title']+'" data-sms-type="'+json['type']+'">راهنمای این بخش</button></div>';
    htmlRow += textInputHtmlGenerator(json?.pattern ?? '', 'js_pattern_txt', 'شناسه قالب (الگو یا پترن آیدی)', "ltr", patternDisabled);
    htmlRow += textInputHtmlGenerator(json?.sms_number ?? '', 'js_sms_number_txt', 'شماره همراه مدیر برای ارسال پیامک', "ltr", smsNumberDisabled);
    htmlRow += '</div>';

    // Submit Buttons
    htmlRow += '<div class="local_submit_parent">';
    htmlRow += '<span class="json_admin_notifs_submit_array btn btn-primary btn-sm">ثبت تغییرات</span>';
    htmlRow += '<span class="json_admin_notifs_cancel btn btn-gray btn-sm">انصراف</span>';
    htmlRow += '</div>';

    htmlRow += '</div>'; // end dynamic section
    htmlRow += '</div>'; // end card-body

    htmlRow += '</div>'; // end card

    return htmlRow;
}





$(function () { // start of document ready:
    //json admin notifs ARRAY

    $('.json_admin_notifs_cancel').click(jsonAdminNotifsCancelBtn);

    if ($(".json_handler_admin_notifs_array")[0]) { //there is json type 1 array list:

        const jsonString = $.trim($('.json_handler_admin_notifs_array > textarea').val());
        let jsonAdminNotifsArrayObj;

        if (jsonString == '') {
            jsonAdminNotifsArrayObj = [];
        } else {
            jsonAdminNotifsArrayObj = JSON.parse(jsonString);
        }

        if (jsonAdminNotifsArrayObj.length == 0 ) {
            const htmlrow = ThereIsNoRowHereHtml();
            $(".json_handler_admin_notifs_array").find(".showbox").find("#sorable_list").html(htmlrow);
        } else {
            $.each(jsonAdminNotifsArrayObj, function (key, value) {
                const htmlrow = jsonAdminNotifsRowHtmlMacker(value);
                $(".json_handler_admin_notifs_array").find(".showbox").find("#sorable_list").append(htmlrow);
            });
        }

        $('.all_json_admin_notifs_edit_btn').click(editJsonAdminNotifsRowsBtn);
        $('.json_admin_notifs_submit_array').off("click");
        $('.row-options-wrapper > .row-option').click(SelectRowOptionsChanged);
        // //https://stackoverflow.com/a/9467172/4565796
        $('.json_admin_notifs_submit_array').click(jsonAdminNotifsArraySubmitBtn);
        $('.js_method').on('change', methodChanged);
        $('.json_admin_notifs_cancel').click(jsonAdminNotifsCancelBtn);
        $('.btn-san-help').click(smsAdminNotifsHelpBtn);
    }

    $('#admin_notifs_save').click(function () {

        let sendData = {
            admin_notifs: $.trim($('#admin_notifs').val())
        }

        Swal.fire({
            title: 'از ذخیره اعلان به مدیران مطمئن هستید؟',
            text: '',
            icon: '',
            showCancelButton: true,
            confirmButtonColor: '#007bff',
            cancelButtonColor: '#909090',
            confirmButtonText: 'بله',
            cancelButtonText: 'انصراف'
        }).then((result) => {
            if (result.isConfirmed) {

                let loadingOverlay = $(this).parent().parent().find('#over_loading');
                loadingOverlay.show();
        
                $.ajax({
        
                    type: "POST",
                    url: mpPanelBaseUrl + "/update-admin-notifs",
                    data: sendData,
                    timeout: 25000,
                    cache: false,
                    success: function (data) {
        
                        loadingOverlay.hide();
        
                        if (data == "ok") {
                            notyf.success('اعلان به مدیران به روز گردید.');
                        } else {
                            notyf.error('مشکلی در به روزرسانی اعلان به مدیران رخ داده است. لظفا صفحه را مجدد رفرش نمایید.');
                        }
        
                    },
                    error: function (xhr, status, error) {
                        loadingOverlay.hide();
                        notyf.error('مشکلی در به روزرسانی اعلان به مدیران رخ داده است. لظفا صفحه را مجدد رفرش نمایید.');
                        notyf.error('Error: ' + xhr.status + ' ' + xhr.statusText);
                    }
        
                });

            }
        })
    });
    
}); //end of jqury doc ready
///////////////////////////////////////////////
