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

<Meta title='@dxtmisha/ru/functional-basic/# Центр ошибок (Error Center)'/>

# Центр ошибок

Модуль `ErrorCenter` предоставляет централизованную надежную систему для управления ошибками приложения. Он позволяет создавать словарные сопоставления кодов ошибок с понятными для пользователя сообщениями, распределять ошибки по группам и подключать целевые слушатели для их обработки там, где это необходимо.

## Быстрый старт

Самый быстрый способ начать работу — использовать статический класс `ErrorCenter`, который выступает в роли глобального синглтона для всего вашего приложения.

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

// 1. Добавление определений ошибок
ErrorCenter.add({
  group: 'network',
  code: '503',
  label: 'Сервис недоступен',
  message: 'В настоящее время сервер не может обработать запрос.'
})

// 2. Подключение слушателя к определенным группам ошибок
ErrorCenter.addHandler('network', (cause) => {
  // Выполнение реакции UI (например, показ уведомления)
  alert(`[СЕТЕВАЯ ОШИБКА] ${cause.label}: ${cause.message}`)
})

// 3. Вызов ошибки в любом месте кода приложения
ErrorCenter.on({ group: 'network', code: '503' })
```

## Архитектура: `ErrorCenter` против `ErrorCenterInstance`

В основе модуля лежат два уровня: статическая обертка (мост) и базовый инстанцируемый движок. Понимание того, какой из них использовать, имеет решающее значение для поддержания чистой архитектуры.

### Когда использовать `ErrorCenter` (Статическая обертка)

`ErrorCenter` — это глобально доступный статический класс, который управляет ошибками на уровне приложения. Внутри себя он автоматически инициализирует один экземпляр `ErrorCenterInstance`.

**Сценарии использования:**
- **Глобальные сетевые запросы:** Перехват необработанных HTTP-статусов (`401`, `403`, `500`).
- **Инициализация приложения:** Регистрация проблем с авторизацией или устареванием сессии.
- **Синхронизация микрофронтендов:** Глобальный обмен контекстом ошибок без необходимости передачи пропсов или инъекции зависимостей.

### Когда использовать `new ErrorCenterInstance()`

`ErrorCenterInstance` — это базовый движок, который фактически управляет состояниями и обработчиками. Вы можете создать его экземпляр напрямую, чтобы сформировать **изолированные** зоны управления ошибками.

**Сценарии использования:**
- **Сложные формы и валидации:** Конкретный компонент формы должен отслеживать и реагировать исключительно на свои локальные ошибки валидации, не загрязняя глобальные логи.
- **Модульные подсистемы:** Независимые плагины, виджеты или сторонние интеграции, работающие внутри приложения.
- **Модульное тестирование:** Безопасное мокирование и проверка поведения обработчиков ошибок без побочных эффектов между наборами тестов.

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

// Изолированная среда ошибок для конкретного модуля
const formErrorCenter = new ErrorCenterInstance()

formErrorCenter.add({
  group: 'validation',
  code: 'missing_field',
  message: 'Это поле обязательно для заполнения.'
})

formErrorCenter.addHandler('validation', (cause) => {
  // Обновляет локальное состояние UI специально для этой формы
  showLocalFieldError(cause)
})
```
