<?php

declare(strict_types=1);

namespace App\Services\Dashboard;

/**
 * Чистая логика светофора балансов внешних сервисов: «хватит на N дней» + цвет.
 * Без БД/сети — unit-тестируема. Светофор по ДВУМ правилам (решение владельца 28.06):
 *   🔴 баланс < red_floor  ИЛИ  дней_осталось < 3
 *   🟡 баланс < amber_floor ИЛИ  дней_осталось < 7
 *   🟢 иначе
 *
 * Spec: docs/superpowers/specs/2026-06-28-external-service-balances-design.md
 */
class BalanceHealth
{
    /**
     * @return array{days_left:?int,light:string}
     */
    public static function evaluate(
        float $balance,
        ?float $dailySpend,
        float $redFloor,
        float $amberFloor,
    ): array {
        // Отрицательный/нулевой баланс → денег уже нет: 0 дней (не отрицательное «−1 дн.»).
        $days = ($dailySpend !== null && $dailySpend > 0)
            ? max(0, (int) floor($balance / $dailySpend))
            : null;

        $light = 'green';
        if ($balance < $amberFloor || ($days !== null && $days < 7)) {
            $light = 'amber';
        }
        if ($balance < $redFloor || ($days !== null && $days < 3)) {
            $light = 'red';
        }

        return ['days_left' => $days, 'light' => $light];
    }
}
