<?php

declare(strict_types=1);

namespace App\Shared\Support;

final class Format
{
    public static function money(mixed $value): string
    {
        return number_format((float) $value, 2, '.', '');
    }

    public static function qty(mixed $value, int $maxDecimals = 3): string
    {
        $num = (float) $value;
        if (abs($num - round($num)) < 0.0000001) {
            return number_format((int) round($num), 0, '.', '');
        }

        $formatted = number_format($num, max(0, $maxDecimals), '.', '');
        return rtrim(rtrim($formatted, '0'), '.');
    }

    public static function docTypeLabel(string $type): string
    {
        $map = [
            'RECEIPT' => 'إضافة',
            'ISSUE' => 'صرف',
            'TRANSFER' => 'تحويل',
            'SCRAP' => 'هالك',
            'ADJUST' => 'تسوية',
            'OPENING' => 'افتتاحي',
        ];

        return $map[$type] ?? $type;
    }

    public static function checkStatusLabel(string $status): string
    {
        $map = [
            'received' => 'مستلم',
            'endorsed' => 'مُظهر لمورد',
            'returned' => 'مرتد/مُعاد',
            'settled_cash' => 'تمت تسويته نقدًا',
            'replaced' => 'تم استبداله',
            'canceled' => 'ملغي',
        ];

        $key = strtolower(trim($status));
        return $map[$key] ?? $status;
    }

    public static function checkHolderLabel(?string $type): string
    {
        $map = [
            'company' => 'داخل الشركة',
            'supplier' => 'عند المورد',
            'customer' => 'مع العميل',
        ];

        $key = strtolower(trim((string) $type));
        return $map[$key] ?? '-';
    }

    public static function quotationStatusLabel(string $status): string
    {
        $map = [
            'draft' => 'مسودة',
            'sent' => 'مرسل',
            'approved' => 'معتمد',
            'rejected' => 'مرفوض',
            'expired' => 'منتهي',
            'converted' => 'تم التحويل',
        ];

        $key = strtolower(trim($status));
        return $map[$key] ?? $status;
    }
}
