// # Source: https://github.com/sudojia/AutoTaskScript/blob/script/src/web/sudojia_sspanel.js
// # Raw: https://raw.githubusercontent.com/sudojia/AutoTaskScript/script/src/web/sudojia_sspanel.js
// # Repo: sudojia/AutoTaskScript
// # Path: src/web/sudojia_sspanel.js
// # UploadedAt: 2025-04-28T19:26:13+08:00
// # SHA256: 8bd3374a2bddc90f5a4577c605285a665d61dde740ce6ae4eaad72eb42ea37a5
// # Category: web版/账密
// # Evidence: web/H5关键词 + username/password/login
// 

/**
 * 机场每日签到
 *
 * 如何鉴别是 SSPANEL 面板？
 * 网站拉到最下面有 Powered by SSPANEL 就是 SSPANEL 面板框架的机场
 * 格式要求：网站1,邮箱1:密码1&网站2,邮箱2:密码2
 * export SITE_ACCOUNTS = 'https://paolu.com,abc@gmail.com:123456'
 * 多账号用 & 或换行
 *
 * @author Telegram@sudojia
 * @site https://blog.imzjw.cn
 * @date 2021/9/25
 * @lastModifyTime: 2024/09/16
 *
 * const $ = new Env('SSPANEL面板签到')
 * cron: 35 9 * * *
 */
const initScript = require('../utils/initScript')
const {$, notify, sudojia, checkUpdate} = initScript('SSPANEL面板签到');
const {default: axios} = require("axios");
const accountList = process.env.SITE_ACCOUNTS ? process.env.SITE_ACCOUNTS.split(/[\n&]/) : [];
// 消息推送
let message = '';
// 请求头
const headers = {
    "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
    "User-Agent": sudojia.getRandomUserAgent('PC'),
    'Accept': 'application/json, text/javascript, */*; q=0.01',
    'Accept-Encoding': 'gzip, deflate, br, zstd',
};

!(async () => {
    await checkUpdate($.name, accountList);
    console.log(`\n已随机分配 User-Agent\n\n${headers['user-agent'] || headers['User-Agent']}`);
    // 校验格式
    const isValidFormat = accountList.every(account => {
        const parts = account.split(',');
        if (parts.length !== 2) {
            return false;
        }
        const [site, credentials] = parts;
        const credParts = credentials.split(':');
        return !(credParts.length !== 2 || !site || !credentials);
    });
    if (!isValidFormat) {
        console.error('格式错误，请确保遵循要求格式：网站1,邮箱1:密码1&网站2,邮箱2:密码2');
        process.exit(0);
    }
    for (let i = 0; i < accountList.length; i++) {
        const index = i + 1;
        const [rawUrl, emailPwd] = accountList[i].split(',');
        const [email, pwd] = emailPwd.split(':');
        const url = rawUrl.endsWith('/') ? rawUrl.slice(0, -1) : rawUrl;
        console.log(`\n*****第[${index}]个${$.name}账号*****`);
        console.log(`设定的机场网站是：${url}`);
        await $.wait(sudojia.getRandomWait(300, 666));
        message += `📣====${$.name}账号[${index}]====📣\n`;
        await login(url, email, pwd);
    }
    if (message) {
        await notify.sendNotify(`「${$.name}」`, `${message}`);
    }
})().catch((e) => $.logErr(e)).finally(() => $.done());

/**
 * 登录
 *
 * @returns {*}
 */
async function login(url, email, pwd) {
    try {
        const options = {
            url: `${url}/auth/login`,
            method: 'POST',
            headers: headers,
            data: `email=${email}&passwd=${pwd}&code=`
        }
        const response = await axios(options);
        if (1 !== response.data.ret) {
            return console.error(`登录失败：${response.data.msg}`);
        }
        const cookies = response.headers['set-cookie'];
        headers.Cookie = cookies.join('; ');
        console.log('登录成功~');
        await $.wait(sudojia.getRandomWait(800, 1200));
        await checkin(url);
    } catch (e) {
        console.error(`登录时发生异常：${e}`);
    }
}

/**
 * 签到
 *
 * @returns {*}
 */
async function checkin(url) {
    try {
        const data = await sudojia.sendRequest(`${url}/user/checkin`, 'post', headers, {});
        if (1 !== data.ret) {
            return console.error(`签到失败：${data.msg}`);
        }
        const {lastUsedTraffic, unUsedTraffic} = data.trafficInfo;
        console.log(`签到成功，${data.msg}`);
        console.log(`总套餐：${data.traffic}`);
        console.log(`已使用：${lastUsedTraffic}`);
        console.log(`剩余流量：${unUsedTraffic}`);
        message += `签到成功，${data.msg}\n`;
        message += `总套餐：${data.traffic}\n`;
        message += `已使用：${lastUsedTraffic}\n`;
        message += `剩余流量：${unUsedTraffic}\n\n`;
    } catch (e) {
        console.error(`签到时发生异常：${e}`);
    }
}