<?php
if (!defined('__TYPECHO_ROOT_DIR__')) exit;

function Mirai_pointsGetVipProducts() {
    $options = Mirai_opt();
    if (!isset($options->pointsVipExchangeEnable) || $options->pointsVipExchangeEnable !== '1') return [];
    if (!function_exists('Mirai_vipEnabled') || !Mirai_vipEnabled()) return [];

    $products = [];
    $enabledLevels = function_exists('Mirai_vipGetEnabledLevels') ? Mirai_vipGetEnabledLevels() : [1, 2, 3];
    foreach ($enabledLevels as $level) {
        $field = 'pointsVipExchange_' . $level;
        if (isset($options->$field) && (int)$options->$field > 0) {
            $name = function_exists('Mirai_vipGetName') ? Mirai_vipGetName($level) : $level . '级会员';
            $products[] = [
                'level' => $level,
                'time' => 30,
                'points' => (int)$options->$field,
                'name' => $name . ' 30天',
            ];
        }
    }
    return $products;
}

function Mirai_pointsExchangeVip($uid, $level, $time) {
    if (!$uid) return ['success' => false, 'msg' => '请先登录'];
    if (!Mirai_pointsEnabled()) return ['success' => false, 'msg' => '积分功能未启用'];
    if (!function_exists('Mirai_vipEnabled') || !Mirai_vipEnabled()) return ['success' => false, 'msg' => '会员功能未启用'];

    $options = Mirai_opt();
    if (!isset($options->pointsVipExchangeEnable) || $options->pointsVipExchangeEnable !== '1') {
        return ['success' => false, 'msg' => '积分兑换会员未启用'];
    }

    $field = 'pointsVipExchange_' . $level;
    $requiredPoints = isset($options->$field) ? (int)$options->$field : 0;
    if ($requiredPoints <= 0) return ['success' => false, 'msg' => '该等级不支持积分兑换'];

    if (function_exists('Mirai_vipCheckUserValid')) {
        $vipStatus = Mirai_vipCheckUserValid($uid);
        if ($vipStatus['is_valid'] && $vipStatus['level'] >= $level) {
            return ['success' => false, 'msg' => '您已是该等级或更高等级会员'];
        }
    }

    $balance = Mirai_pointsGetBalance($uid);
    if ($balance < $requiredPoints) {
        return ['success' => false, 'msg' => Mirai_pointsName() . '不足，当前' . $balance . '，需要' . $requiredPoints];
    }

    $result = Mirai_pointsAdjust($uid, -$requiredPoints, 'exchange_vip', 'vip', $level, '积分兑换会员');
    if (!$result['success']) return $result;

    if (function_exists('Mirai_vipProcessOrderPaid')) {
        Mirai_vipProcessOrderPaid($uid, $level, $time, 'new');
    }

    return ['success' => true, 'points_spent' => $requiredPoints, 'level' => $level];
}
