<?php

namespace App\Support;

/**
 * Нормализация флага onlineMode из query/form/JSON (0, 1, "true", "false", bool).
 */
final class OnlineMode
{
    public static function isOnline(mixed $value): bool
    {
        if (is_bool($value)) {
            return $value;
        }

        if (is_int($value) || is_float($value)) {
            return (int) $value === 1;
        }

        if ($value === null) {
            return false;
        }

        $normalized = strtolower(trim((string) $value));

        if ($normalized === '') {
            return false;
        }

        if (in_array($normalized, ['1', 'true', 'yes', 'on'], true)) {
            return true;
        }

        if (in_array($normalized, ['0', 'false', 'no', 'off'], true)) {
            return false;
        }

        // Неизвестное непустое значение — считаем offline, чтобы не ломать очный приём.
        return false;
    }

    public static function toInt(mixed $value): int
    {
        return self::isOnline($value) ? 1 : 0;
    }
}
