// # Source: https://github.com/sudojia/AutoTaskScript/blob/script/src/wx_mini/sudojia_mallcoo.js
// # Raw: https://raw.githubusercontent.com/sudojia/AutoTaskScript/script/src/wx_mini/sudojia_mallcoo.js
// # Repo: sudojia/AutoTaskScript
// # Path: src/wx_mini/sudojia_mallcoo.js
// # UploadedAt: 2025-04-28T19:26:13+08:00
// # SHA256: 6ca50f248e9de6ddd7225c30ef1a1fe7f56a6b0b9f9bed0f489b5d7a3829374f
// # Category: 微信小程序/抓包版
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
// 

/**
 * 欣都龙城小程序
 *
 * 抓包 Host：https://m.mallcoo.cn 随便找一个 url，在 Body 中获取 Token 的值
 * export MALLCOO_TOKEN = '_Fl34xxxxxxxxxxxxxxxx'
 * 多账号用 & 或换行
 *
 * @author Telegram@sudojia
 * @site https://blog.imzjw.cn
 * @date 2024/07/22
 *
 * const $ = new Env('欣都龙城')
 * cron: 48 10 * * *
 */
const initScript = require('../utils/initScript')
const {$, notify, sudojia, checkUpdate} = initScript('欣都龙城');
const mallcooList = process.env.MALLCOO_TOKEN ? process.env.MALLCOO_TOKEN.split(/[\n&]/) : [];
let message = '';
// 接口地址
const baseUrl = 'https://m.mallcoo.cn'
// 请求头
const headers = {
    'User-Agent': sudojia.getRandomUserAgent(),
    'Content-Type': 'application/json',
    'Accept': '*/*',
    'Referer': 'https://servicewechat.com/wx7ef63cf605a639fb/18/page-frame.html',
    'Accept-Encoding': 'gzip, deflate, br',
};
// 请求体
let getBody = {
    "MallId": 10144,
    "Header": {
        "systemInfo": {
            "model": "microsoft",
            "SDKVersion": "3.5.0",
            "system": "Windows 11 x64",
            "version": "3.9.10",
            "miniVersion": "2.67.7"
        }
    }
}

!(async () => {
    await checkUpdate($.name, mallcooList);
    console.log(`\n已随机分配 User-Agent\n\n${headers['user-agent'] || headers['User-Agent']}`);
    for (let i = 0; i < mallcooList.length; i++) {
        const index = i + 1;
        $.isLogin = true;
        getBody.Header.Token = mallcooList[i];
        console.log(`\n*****第[${index}]个${$.name}账号*****`);
        message += `📣====${$.name}账号[${index}]====📣\n`;
        await main();
        await $.wait(sudojia.getRandomWait(2000, 2500));
    }
    if (message) {
        await notify.sendNotify(`「${$.name}」`, `${message}`);
    }
})().catch((e) => $.logErr(e)).finally(() => $.done());

async function main() {
    await getUserInfo();
    if (!$.isLogin) {
        console.error('用户token错误或已过期');
        process.exit(0);
    }
    await $.wait(sudojia.getRandomWait(2000, 2500));
    await checkinBefore();
    await $.wait(sudojia.getRandomWait(2000, 2500));
    await getPoints();
    await $.wait(sudojia.getRandomWait(2000, 2500));
    await getCheckinDetail();
    await $.wait(sudojia.getRandomWait(2000, 2500));
    await getUserExpiredBonus();
}

/**
 * 获取用户信息
 *
 * @return {Promise<void>}
 */
async function getUserInfo() {
    try {
        const data = await sudojia.sendRequest(`${baseUrl}/api/user/user/GetUserAndMallCard`, 'post', headers, getBody);
        if (1 === data.m) {
            console.log(`昵称：${data.d.NickName}`);
            message += `昵称：${data.d.NickName}\n`;
        } else {
            if (320 === data.m) {
                $.isLogin = false;
                return;
            }
            console.log(data);
        }
    } catch (e) {
        console.error(`获取用户信息时发生异常：${e}`);
    }
}

/**
 * 检测签到状态
 *
 * @return {Promise<void>}
 */
async function checkinBefore() {
    try {
        let body = JSON.parse(JSON.stringify(getBody));
        body.IsCheckMemberCard = true;
        const data = await sudojia.sendRequest(`${baseUrl}/api/user/user/CheckinBefore`, 'post', headers, body);
        if (1 === data.m) {
            if (!data.d.IsCheckIn) {
                await $.wait(sudojia.getRandomWait(2000, 2500));
                await signIn();
            }
        } else {
            console.error(data.e);
        }
    } catch (e) {
        console.error(`检测签到状态时发生异常：${e}`);
    }
}

/**
 * 签到
 *
 * @return {Promise<void>}
 */
async function signIn() {
    try {
        let body = JSON.parse(JSON.stringify(getBody));
        delete body.MallId
        body.MallID = 10144;
        const data = await sudojia.sendRequest(`${baseUrl}/api/user/User/CheckinV2`, 'post', headers, body);
        if (1 === data.m) {
            console.log(`签到成功，积分+${data.d.Content}`);
            message += `签到成功，积分+${data.d.Content}\n`;
        } else {
            console.log(data.e);
            message += `${data.e}\n`;
        }
    } catch (e) {

    }
}

/**
 * 获取积分信息
 *
 * @return {Promise<void>}
 */
async function getPoints() {
    try {
        let body = JSON.parse(JSON.stringify(getBody));
        delete body.MallId
        body.MallID = 10144;
        body.PageIndex = 1;
        body.PageSize = 10;
        const data = await sudojia.sendRequest(`${baseUrl}/api/user/Bonus/GetBonusHistoryList`, 'post', headers, body);
        if (1 === data.m) {
            console.log(`当前积分：${data.d.TotalBonus}`);
            message += `当前积分：${data.d.TotalBonus}\n`;
        } else {
            console.log(data.e);
        }
    } catch (e) {
        console.error(`获取积分信息时发生异常：${e}`);
    }
}

/**
 * 获取签到天数
 *
 * @return {Promise<void>}
 */
async function getCheckinDetail() {
    try {
        let body = JSON.parse(JSON.stringify(getBody));
        delete body.MallId
        body.MallID = 10144;
        const data = await sudojia.sendRequest(`${baseUrl}/api/user/User/GetCheckinDetail`, 'post', headers, body);
        if (1 === data.m) {
            console.log(`已连续签到${data.d.ContinueDay}天`);
            message += `已连续签到${data.d.ContinueDay}天\n`;
        } else {
            console.log(data.e);
        }
    } catch (e) {
        console.error(`获取签到天数时发生异常：${e}`);
    }
}

/**
 * 获取过期积分
 *
 * @return {Promise<void>}
 */
async function getUserExpiredBonus() {
    try {
        let body = JSON.parse(JSON.stringify(getBody));
        delete body.MallId
        body.MallID = 10144;
        const data = await sudojia.sendRequest(`${baseUrl}/api/user/Bonus/GetUserExpiredBonus`, 'post', headers, body);
        if (1 === data.m) {
            console.log(`${data.d.ExpiredBounsTips}`);
            message += `${data.d.ExpiredBounsTips}\n\n`;
        } else {
            console.log(data.e);
        }
    } catch (e) {
        console.error(`获取过期积分时发生异常：${e}`);
    }
}
