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

<Meta title='@dxtmisha/vi/functional/Classes/GeoRef - Trình quản lý địa lý phản ứng'/>

# Lớp GeoRef

Một lớp tĩnh (static) có tính phản ứng để quản lý dữ liệu địa lý toàn cục. Nó cung cấp quyền truy cập tập trung vào các thông tin như quốc gia hiện tại, ngôn ngữ, locale tiêu chuẩn và ngày đầu tiên của tuần, đảm bảo rằng mọi thay đổi đều được phản ánh trong toàn bộ ứng dụng.

## Các tính năng chính

- **Tính phản ứng toàn cục** — sử dụng trạng thái phản ứng chung cho dữ liệu địa lý.
- **Quản lý tập trung** — là "điểm tin cậy duy nhất" (single point of truth) cho các cài đặt quốc gia và ngôn ngữ.
- **Truy cập tĩnh** — các phương thức có thể được gọi trực tiếp trên lớp mà không cần khởi tạo instance.

## Sử dụng Toàn cục

Vì `GeoRef` là một lớp tĩnh (static class), các phương thức của nó được gọi trực tiếp mà không cần tạo một instance. Nó phục vụ như một điểm truy cập duy nhất cho các cài đặt địa lý của ứng dụng.

```typescript
import { GeoRef } from '@dxtmisha/functional'
import { watch } from 'vue'

// 1. Lấy giá trị phản ứng
const country = GeoRef.getCountry()
console.log('Quốc gia hiện tại:', country.value)

// 2. Theo dõi các thay đổi
watch(GeoRef.getLanguage(), (lang) => {
  console.log('Ngôn ngữ đã thay đổi thành:', lang)
})

// 3. Thay đổi vị trí toàn cục
GeoRef.set('vi-VN') 
// Tất cả các lệnh gọi getCountry, getLanguage, v.v., sẽ tự động cập nhật
```

## Trạng thái và Truy xuất Dữ liệu

- `get(): Ref<GeoItemFull>` — trả về một đối tượng phản ứng chứa thông tin địa lý đầy đủ.
- `getCountry(): ComputedRef<string>` — mã quốc gia hiện tại (ví dụ: `'VN'`).
- `getLanguage(): ComputedRef<string>` — mã ngôn ngữ hiện tại (ví dụ: `'vi'`).
- `getStandard(): ComputedRef<string>` — định dạng locale tiêu chuẩn đầy đủ (ví dụ: `'vi-VN'`).
- `getFirstDay(): ComputedRef<string>` — ngày đầu tiên của tuần (ví dụ: `'monday'`).

## Hành động

### `set`
Thay đổi dữ liệu địa lý toàn cục dựa trên mã được cung cấp. Hành động này cập nhật ngay lập tức tất cả các phụ thuộc phản ứng của `GeoRef` trong toàn bộ ứng dụng.

**Tham số:**
- `code: string` — mã quốc gia, dạng đầy đủ ngôn ngữ-quốc gia (ví dụ: "vi-VN") hoặc một trong hai.

**Trả về:** `void`

## Các kiểu

### GeoItemFull
Cấu trúc đối tượng chứa thông tin địa lý đầy đủ.

- `country: string` — mã quốc gia hiện tại.
- `language: string` — mã ngôn ngữ hiện tại.
- `standard: string` — mã locale tiêu chuẩn.
- `firstDay: string` — ngày đầu tiên của tuần.
- `countryAlternative?: string[]` — danh sách các mã quốc gia thay thế.
- `languageAlternative?: string[]` — danh sách các mã ngôn ngữ thay thế.
- `zone?: string | null` — múi giờ hiện tại.
- `phoneCode?: string` — mã điện thoại quốc gia.
- `phoneMask?: string | string[]` — mặt nạ số điện thoại điển hình.
