<?php

namespace App\Services\Payroll\Statutory;

class PtCalculator
{
    /**
     * Resolve PT amount from slabs: find slab where min_gross <= gross < max_gross (or max_gross is null).
     * Slabs must be sorted by min_gross; first matching slab wins.
     *
     * @param array<int, array{min_gross: float, max_gross: float|null, amount: float}> $slabs
     */
    public function calculate(float $grossMonthly, array $slabs): float
    {
        foreach ($slabs as $slab) {
            $min = (float) ($slab['min_gross'] ?? 0);
            $max = isset($slab['max_gross']) ? (float) $slab['max_gross'] : null;
            if ($grossMonthly < $min) {
                continue;
            }
            if ($max !== null && $grossMonthly >= $max) {
                continue;
            }
            return round((float) ($slab['amount'] ?? 0), 2);
        }
        return 0.0;
    }
}
