<?php

namespace App\Billing\Service;

/**
 * وضعیت پرداخت یک صورتحساب.
 *
 * ستون `invoices.status` چرخه‌ی حیات صورتحساب را نگه می‌دارد (draft → finalized → void)
 * و هرگز به `paid` نمی‌رود؛ پول واقعی در `session_payments` ثبت می‌شود. بنابراین وضعیت
 * پرداخت **مشتق** است: مجموع پرداخت‌های مراجعه در برابر سهم بیمار (`patient_rials`).
 * همین‌جا تنها مرجع این قاعده است تا نماها از هم واگرا نشوند.
 */
final class InvoicePaymentStatus
{
    public const PAID      = 'paid';
    public const PARTIAL   = 'partial';
    public const UNSETTLED = 'unsettled';

    /** @return self::PAID|self::PARTIAL|self::UNSETTLED */
    public static function resolve(int $dueRials, int $paidRials): string
    {
        if ($paidRials >= $dueRials) {
            return self::PAID;
        }

        return $paidRials > 0 ? self::PARTIAL : self::UNSETTLED;
    }
}
