import {Meta} from '@storybook/addon-docs/blocks'

<Meta title='@dxtmisha/vi/functional-basic/# Geo và Định dạng'/>

# Geo và Định dạng

Công cụ quản lý địa phương hóa (i18n), dữ liệu địa lý và định dạng thông minh. Hệ thống tự động phát hiện cài đặt người dùng, đảm bảo hiển thị con số, ngày tháng và tiền tệ chuẩn xác.

## Địa phương hóa (Geo)
Quản lý trạng thái quốc gia, ngôn ngữ và múi giờ. Hỗ trợ tự động phát hiện và lưu trữ trình duyệt.

```javascript
import { Geo } from '@dxtmisha/functional-basic'

// Cài đặt toàn cục
Geo.set('vi-VN', true)      // Thiết lập locale và lưu lại
Geo.setTimezone('+07:00')   // Ghi đè múi giờ
Geo.getCountry()            // 'VN'

// Dữ liệu tham khảo
const list = Geo.getList()  // Danh sách đầy đủ quốc gia và ngôn ngữ
const current = Geo.getItem() // Đối tượng dữ liệu locale hiện tại
const hasJP = Geo.hasCountry('JP') // Kiểm tra hỗ trợ quốc gia
```

## Định dạng (GeoIntl)
Công cụ vạn năng để định dạng dữ liệu dựa trên native `Intl`.

```javascript
import { GeoIntl } from '@dxtmisha/functional-basic'

const intl = GeoIntl.getInstance()

// Số & Tiền tệ
intl.currency(1000, 'VND')          // '1.000 ₫'
intl.percent(0.15)                  // '15%'

// Ngày & Giờ
intl.date(new Date(), 'full')       // Ngày định dạng đầy đủ
intl.relative(new Date() - 3600000) // '1 giờ trước'
intl.relativeLimit(pastDate, 7)     // Tương đối (tới 7 ngày) hoặc tuyệt đối

// Tiện ích
intl.plural(5, 'quả táo|quả táo')   // Chia số nhiều
intl.sizeFile(1024 * 1024)          // '1 MB'
intl.sort(['táo', 'Voi', 'chuối'])  // Sắp xếp thông minh theo locale
intl.displayNames('DE', 'region')   // 'Đức' (đã địa phương hóa)
```

## Cờ quốc gia (GeoFlag)
Lấy biểu tượng cờ và tên quốc gia bằng ngôn ngữ bản địa hoặc hệ thống.

```javascript
import { GeoFlag } from '@dxtmisha/functional-basic'

const geoFlag = new GeoFlag('vi-VN')

// Dữ liệu quốc gia cụ thể
const ru = geoFlag.get('RU') // { icon: 'f-ru', country: 'Nga', area: '7', ... }

// Danh sách tên bằng ngôn ngữ gốc
const native = geoFlag.getNational(['DE']) 
// [{ country: 'Đức', nationalCountry: 'Deutschland', ... }]
```

## Điện thoại (GeoPhone)
Tự động xác định quốc gia qua số điện thoại và làm việc với mặt nạ quốc tế.

```javascript
import { GeoPhone } from '@dxtmisha/functional-basic'

// Nhận diện thông minh
const { item, phone } = GeoPhone.getByPhone('84900123456') 
// item — dữ liệu VN, phone — số đã làm sạch

// Định dạng
GeoPhone.toMask(phone, item.mask) // '+84 (900) 123-456'
GeoPhone.clear(' +84 (900) 123-456 ') // '84900123456' (làm sạch)
```

## Danh sách (Formatters)
Chuyển đổi hàng loạt mảng đối tượng. Tự động tạo các thuộc tính mới với hậu tố `Format`.

```javascript
import { Formatters } from '@dxtmisha/functional-basic'

const options = {
  price: { type: 'currency', options: 'VND' },
  birthday: { type: 'date' },
  'user.name': { type: 'name' }, // Kết hợp firstName/lastName
  count: { type: 'plural', options: 'quả|quả' },
  status: { 
    transformation: (v) => v === 1 ? 'Ok' : 'Lỗi' 
  }
}

// transformed — bản sao của data với các trường priceFormat, birthdayFormat...
const transformed = new Formatters(options, data).to()
```
