var BilibiliMiniGameApi = {
    BL_CheckScene: function(scenePtr, receiverNamePtr, requestIdPtr) {
        BilibiliMiniGameInternal.invoke({
            apiName: "checkScene",
            scene: UTF8ToString(scenePtr),
            receiverName: UTF8ToString(receiverNamePtr),
            requestId: UTF8ToString(requestIdPtr),
            readIsExist: true
        });
    },

    BL_NavigateToScene: function(scenePtr, receiverNamePtr, requestIdPtr) {
        BilibiliMiniGameInternal.invoke({
            apiName: "navigateToScene",
            scene: UTF8ToString(scenePtr),
            receiverName: UTF8ToString(receiverNamePtr),
            requestId: UTF8ToString(requestIdPtr),
            readIsExist: false
        });
    },

    BL_AddShortcut: function(receiverNamePtr, requestIdPtr) {
        BilibiliMiniGameInternal.invoke({
            apiName: "addShortcut",
            scene: null,
            receiverName: UTF8ToString(receiverNamePtr),
            requestId: UTF8ToString(requestIdPtr),
            readIsExist: false
        });
    },

    BL_CheckShortcut: function(receiverNamePtr, requestIdPtr) {
        BilibiliMiniGameInternal.invoke({
            apiName: "checkShortcut",
            scene: null,
            receiverName: UTF8ToString(receiverNamePtr),
            requestId: UTF8ToString(requestIdPtr),
            readIsExist: true
        });
    },

    BL_RequestRecharge: function(orderIdPtr, payInfoPtr, devOrderIdPtr, receiverNamePtr, requestIdPtr) {
        var params = {
            order_id: UTF8ToString(orderIdPtr),
            pay_info: UTF8ToString(payInfoPtr)
        };
        var devOrderId = UTF8ToString(devOrderIdPtr);
        if (devOrderId) {
            params.dev_order_id = devOrderId;
        }
        BilibiliMiniGameInternal.invoke({
            apiName: "requestRecharge",
            scene: null,
            params: params,
            receiverName: UTF8ToString(receiverNamePtr),
            requestId: UTF8ToString(requestIdPtr),
            readIsExist: false
        });
    }
};

autoAddDeps(BilibiliMiniGameApi, '$BilibiliMiniGameInternal');
mergeInto(LibraryManager.library, BilibiliMiniGameApi);
