| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 | 
							- <?php
 - 
 - namespace App\Enums\Setting;
 - 
 - use Filament\Support\Contracts\HasLabel;
 - use NumberFormatter;
 - 
 - enum NumberFormat: string implements HasLabel
 - {
 -     case CommaDot = 'comma_dot';
 -     case DotComma = 'dot_comma';
 -     case IndianGrouping = 'indian_grouping';
 - 
 -     case ApostropheDot = 'apostrophe_dot';
 - 
 -     case SpaceComma = 'space_comma';
 -     case SpaceDot = 'space_dot';
 - 
 -     public const DEFAULT = self::CommaDot->value;
 - 
 -     public function getLabel(): ?string
 -     {
 -         return match ($this) {
 -             self::CommaDot => '#,###,###.##',
 -             self::DotComma => '#.###.###,##',
 -             self::IndianGrouping => '#,##,###.##',
 -             self::ApostropheDot => '#\'###\'###.##',
 -             self::SpaceComma => '# ### ###,##',
 -             self::SpaceDot => '# ### ###.##',
 -         };
 -     }
 - 
 -     public function getDecimalMark(): string
 -     {
 -         return match ($this) {
 -             self::CommaDot, self::SpaceDot, self::IndianGrouping, self::ApostropheDot => '.',
 -             self::DotComma, self::SpaceComma => ',',
 -         };
 -     }
 - 
 -     public function getThousandsSeparator(): string
 -     {
 -         return match ($this) {
 -             self::CommaDot, self::IndianGrouping => ',',
 -             self::DotComma => '.',
 -             self::SpaceComma, self::SpaceDot => ' ',
 -             self::ApostropheDot => '\'',
 -         };
 -     }
 - 
 -     public function getFormattedExample(): string
 -     {
 -         $exampleNumber = 1234567.89;
 -         $formatter = new NumberFormatter($this->getAssociatedLocale(), NumberFormatter::DECIMAL);
 - 
 -         return $formatter->format($exampleNumber);
 -     }
 - 
 -     public function getAssociatedLocale(): string
 -     {
 -         return match ($this) {
 -             self::CommaDot => 'en_US',
 -             self::DotComma => 'de_DE',
 -             self::IndianGrouping => 'en_IN',
 -             self::ApostropheDot => 'fr_FR',
 -             self::SpaceComma => 'fr_CH',
 -             self::SpaceDot => 'xh_ZA',
 -         };
 -     }
 - 
 -     public static function fromLanguageAndCountry(string $language, string $countryCode): string
 -     {
 -         $testNumber = 1234567.8912;
 -         $fullLocale = "{$language}_{$countryCode}";
 - 
 -         $numberFormatter = new NumberFormatter($fullLocale, NumberFormatter::DECIMAL);
 -         $formattedNumber = $numberFormatter->format($testNumber);
 - 
 -         return self::fromFormattedNumber($formattedNumber);
 -     }
 - 
 -     public static function fromFormattedNumber(string $formattedNumber): string
 -     {
 -         $commaDot = strpos($formattedNumber, '.') && strpos($formattedNumber, ',');
 -         $dotComma = strpos($formattedNumber, ',') && strpos($formattedNumber, '.');
 -         $indianGrouping = strpos($formattedNumber, ',') && ! strpos($formattedNumber, '.');
 -         $apostropheDot = strpos($formattedNumber, '\'') && strpos($formattedNumber, '.');
 -         $spaceComma = strpos($formattedNumber, ' ') && strpos($formattedNumber, ',');
 -         $spaceDot = strpos($formattedNumber, ' ') && strpos($formattedNumber, '.');
 - 
 -         return match (true) {
 -             $commaDot => self::CommaDot->value,
 -             $dotComma => self::DotComma->value,
 -             $indianGrouping => self::IndianGrouping->value,
 -             $apostropheDot => self::ApostropheDot->value,
 -             $spaceComma => self::SpaceComma->value,
 -             $spaceDot => self::SpaceDot->value,
 -             default => self::DEFAULT,
 -         };
 -     }
 - 
 -     public function getFormattingParameters(): array
 -     {
 -         return [$this->getDecimalMark(), $this->getThousandsSeparator()];
 -     }
 - }
 
 
  |