/**
 * 支付行为指数（JRZQ3C9R）数据解析工具
 */

/**
 * 将 -1 / 空 / null 统一视为 0，其他数值转为 Number
 */
export function normalizeValue(value) {
    if (value === undefined || value === null || value === "" || value === -1) {
        return 0;
    }
    const num = Number(value);
    return Number.isNaN(num) ? 0 : num;
}

/**
 * 从原始 data 中提取真正的指标对象
 * 兼容多种包裹结构：
 * - { code, data: {...} }
 * - { data: { code, data: {...} } }
 */
export function extractPpcmData(raw) {
    if (!raw) return {};

    // example.json 结构：data.data.data
    if (raw.data && raw.data.data) {
        return raw.data.data || {};
    }

    // 已经是 { code, data } 这一层
    if (raw.data && !raw.code) {
        return raw.data || {};
    }

    return raw || {};
}

/**
 * 获取支付行为评分（原始 300-900 分）
 */
export function getBehavScore(ppcm) {
    const score = normalizeValue(ppcm.ppcm_behav_score);
    return score;
}

/**
 * 将 300-900 分映射到 0-100 分（用于统一风险评分体系）
 */
export function mapScoreTo100(score) {
    if (!score || score <= 0) {
        return 100;
    }
    // 限制在 [300,900]
    const clamped = Math.min(900, Math.max(300, score));
    // 300 -> 0, 900 -> 100
    const mapped = ((clamped - 300) / 600) * 100;
    return Math.round(mapped);
}

/**
 * 支付行为评分等级标签
 */
export function getBehavLevel(score) {
    if (!score || score <= 0) return "暂无评分";
    if (score >= 800) return "优秀";
    if (score >= 750) return "良好";
    if (score >= 700) return "中等";
    if (score >= 650) return "一般";
    return "偏低";
}

/**
 * 通用时间段
 */
export const PERIODS = [
    { key: "d7", label: "近7天" },
    { key: "m1", label: "近1个月" },
    { key: "m3", label: "近3个月" },
    { key: "m6", label: "近6个月" },
    { key: "m12", label: "近1年" },
    { key: "m24", label: "近2年" },
];

/**
 * 获取查验次数统计（按时间段）
 * ppcm_{period}_bank_qynum / _nbank_fin_qynum / _nbank_other_qynum / _qynum
 */
export function getQueryCountsByPeriod(ppcm) {
    const result = {};

    PERIODS.forEach((p) => {
        const prefix = `ppcm_${p.key}`;
        result[p.key] = {
            bank: normalizeValue(ppcm[`${prefix}_bank_qynum`]),
            nbankFin: normalizeValue(ppcm[`${prefix}_nbank_fin_qynum`]),
            nbankOther: normalizeValue(ppcm[`${prefix}_nbank_other_qynum`]),
            total: normalizeValue(ppcm[`${prefix}_qynum`]),
        };
    });

    return result;
}

/**
 * 获取还款成功 / 失败次数统计（按时间段）
 * success：ppcm_{period}_succ_repnum
 * fail：ppcm_{period}_fail_repnum
 */
export function getRepayCountsByPeriod(ppcm) {
    const result = {};

    PERIODS.forEach((p) => {
        const prefix = `ppcm_${p.key}`;
        result[p.key] = {
            success: normalizeValue(ppcm[`${prefix}_succ_repnum`]),
            fail: normalizeValue(ppcm[`${prefix}_fail_repnum`]),
        };
    });

    return result;
}

/**
 * 获取余额不足失败占比（按时间段）
 * ppcm_{period}_fail_neh_repnum_ratio
 */
export function getInsufficientRatioByPeriod(ppcm) {
    const result = {};

    PERIODS.forEach((p) => {
        const prefix = `ppcm_${p.key}`;
        result[p.key] = normalizeValue(ppcm[`${prefix}_fail_neh_repnum_ratio`]);
    });

    return result;
}

/**
 * 解析最近一次查验距今天数区间编码
 * ppcm_latest_qytoday: 1-10 档位
 */
export function getLatestQueryBucket(ppcm) {
    const code = normalizeValue(ppcm.ppcm_latest_qytoday);
    if (!code) return "暂无查验记录";

    const mapping = {
        1: "0-7天",
        2: "7-15天",
        3: "15-30天",
        4: "30-60天",
        5: "60-90天",
        6: "90-120天",
        7: "120-150天",
        8: "150-180天",
        9: "180-360天",
        10: "360天以上",
    };

    return mapping[code] || "未知区间";
}
