/**
 * Push Message List JS in pushMessageList.html
 * @since cms:1.4.3.2&1.4.3.3 web:1.0
 */
var PushMessageList = {};
PushMessageList.baseApiUrl = COMMON.format(ClientData.conf_checkApiUrl(), ClientData.userInfo_accountPath()) + CONSTANT.URL.CMS.API.PUSH_MESSAGE_LIST;

/**
 * Init when html onload
 */
PushMessageList.init = function () {
    //Check if user is logged in
    COMMON.showLoading();
    COMMON.checkAuth(false);
    TEMPLATE.loadHeader('#includedHeader');
    TEMPLATE.loadConfirmModal();
    const navs = [
        {
            titleLang: 'dashboard',
            href: 'dashboard.html',
        },
        {
            titleLang: 'pushMessageList',
        },
    ];
    TEMPLATE.loadMainNavsTitle('#includedMainTitle', 'pushMessageList', navs, null);
    PushMessageList.getMessageList(function (messageList) {
        PushMessageList.generateMessageListHtml(messageList.pushMessageList);
    });
    COMMON.closeLoading();
};

/**
 * get Message List from CMS
 * @param {function} callback
 */
PushMessageList.getMessageList = function (callback) {
    let param = {
        sid: COMMON.getSid(),
    };
    const url = PushMessageList.baseApiUrl;
    COMMON.cmsAjax(
        url,
        param,
        true,
        function (json) {
            if (callback) {
                callback(json);
            }
        },
        function () {
            console.log('PushMessageList.getMessageList error');
        },
    );
};

/**
 * handle click message event
 * @param {string} pushMessageId
 */
PushMessageList.clickMessage = function (pushMessageId) {
    COMMON.goUrlWithCurrentParams('pushMessageDetail.html', { pushMessageId: pushMessageId });
};

/**
 * generate message list html
 * @param {array} messageList
 * @returns
 */
PushMessageList.generateMessageListHtml = function (messageList) {
    if (typeof messageList === 'undefined' || messageList.length < 1) {
        //show not found
        $('#messageList .not-found').removeClass('d-none');
        return;
    }
    //sort message list by send date
    messageList.sort(function (a, b) {
        if (a.pushSendDate > b.pushSendDate) return -1;
        if (a.pushSendDate < b.pushSendDate) return 1;
        return 0;
    });
    $('#messageList .not-found').addClass('d-none');
    for (var i = 0; i < messageList.length; i++) {
        let message = messageList[i];
        var messageId = message.pushMessageId;
        var mTitle = message.pushMessage;
        var mDate = message.pushSendDate;
        var mSubtitle = message.operationName;
        var messageLi = $('<li class="card mb-2" id="pushMessageId_' + messageId + '"/>');
        if (message.readingFlg) {
            messageLi.addClass('read');
        } else {
            messageLi.addClass('unread');
        }
        var messageA = $('<a class="d-block px-3 py-2 text-decoration-none text-dark"/>');
        messageA.attr('href', "javascript:PushMessageList.clickMessage('" + messageId + "');");
        var titleDiv = $('<div class="fs-12 text-truncate">' + mTitle + '</div>');
        var subTitleMainDiv = $('<div class="d-flex justify-content-between align-items-center"></div>');
        var subTitleDiv = $('<div class="fs-10 text-truncate">' + mSubtitle + '</div>');
        var dateDiv = $('<div class="fs-8 text-secondary text-nowrap">' + mDate + '</div>');
        subTitleMainDiv.append(subTitleDiv);
        subTitleMainDiv.append(dateDiv);
        messageA.append(titleDiv);
        messageA.append(subTitleMainDiv);
        messageLi.append(messageA);
        $('#messageList').append(messageLi);
    }
};

/**
 * dummy message list JSON for test
 */
PushMessageList.dummyMessageListJson = {
    pushMessageList: [
        {
            pushMessageId: 1,
            pushMessage: 'メッセージ内容が入ります。',
            pushSendDate: '2022/07/06 14:14',
            operationName: '作業名が入ります。',
            readingFlg: 0,
        },
        {
            pushMessageId: 2,
            pushMessage: 'メッセージ内容が入ります。メッセージ内容が入ります。メッセージ内容が入ります。メッセージ内容が入ります。',
            pushSendDate: 'xxxxxxxxxxxxxxxxxxxxxxxxxx',
            operationName: '作業名が入ります。作業名が入ります。作業名が入ります。作業名が入ります。作業名が入ります。作業名が入ります。',
            readingFlg: 1,
        },
    ],
};