<?php

namespace App\Modules\Inventory\Stock\Support;

final class DecimalQuantity
{
    public static function add(string $a, string $b): string
    {
        if (function_exists('bcadd')) {
            return bcadd($a, $b, 8);
        }

        return (string) round((float) $a + (float) $b, 8);
    }

    public static function gte(string $a, string $b): bool
    {
        if (function_exists('bccomp')) {
            return bccomp($a, $b, 8) >= 0;
        }

        return (float) $a >= (float) $b;
    }

    public static function isNegative(string $a): bool
    {
        if (function_exists('bccomp')) {
            return bccomp($a, '0', 8) < 0;
        }

        return (float) $a < 0;
    }

    public static function equals(string $a, string $b): bool
    {
        if (function_exists('bccomp')) {
            return bccomp($a, $b, 8) === 0;
        }

        return abs((float) $a - (float) $b) < 1e-8;
    }

    public static function gtZero(string $a): bool
    {
        if (function_exists('bccomp')) {
            return bccomp($a, '0', 8) === 1;
        }

        return (float) $a > 0;
    }

    public static function negate(string $a): string
    {
        if (function_exists('bcmul')) {
            return bcmul($a, '-1', 8);
        }

        return (string) round(-1 * (float) $a, 8);
    }
}
