/**
 * gdStars — единый источник истины для подсчёта звёзд GD 2.0.
 *
 * Правила:
 *   - Звёзды зарабатываются: +1 за level_N_passed, +1 за каждую level_N_coin_X (всего макс 40 на эпоху)
 *   - Звёзды тратятся: храним spent_stars (число) в gd_progress
 *   - Доступно = earned - spent
 *
 * Используется и в меню (GdMenu), и в магазине (GdShop), и в intro (GdPlayWrapper).
 */

const TOTAL_LEVELS = 10;

/** Сколько звёзд заработано за прохождение и сбор монет. */
export function earnedStars(progress) {
    if (!progress) return 0;
    let n = 0;
    for (let i = 1; i <= TOTAL_LEVELS; i++) {
        if (progress[`level_${i}_passed`]) n++;
        for (let c = 1; c <= 3; c++) {
            if (progress[`level_${i}_coin_${c}`]) n++;
        }
    }
    return n;
}

/** Сколько звёзд потрачено (поле spent_stars, или 0). */
export function spentStars(progress) {
    if (!progress) return 0;
    return Number(progress.spent_stars) || 0;
}

/** Доступно к трате. */
export function availableStars(progress) {
    return Math.max(0, earnedStars(progress) - spentStars(progress));
}

/** Сколько собрано монет (для отдельной HUD-метрики). */
export function totalCoins(progress) {
    if (!progress) return 0;
    let n = 0;
    for (let i = 1; i <= TOTAL_LEVELS; i++) {
        for (let c = 1; c <= 3; c++) {
            if (progress[`level_${i}_coin_${c}`]) n++;
        }
    }
    return n;
}
