/** Типы и подписи для UI планировщика / страницы «Сбор данных» (совпадают с ответами API). */

/** Последний ключ — движок оповещений (читает БД после коллекторов; см. описание `alert_engine`). */
export const SCHEDULER_JOB_KEYS = [
  "traffic",
  "servers_rest_ping",
  "uptime_resources",
  "uptime_ping",
  "uptime_speed",
  "internet_path",
  "gre_bgp",
  "certificates_renew",
  "backups",
  "alert_engine",
] as const
export type SchedulerJobKey = (typeof SCHEDULER_JOB_KEYS)[number]

export const SCHEDULER_JOB_LABELS: Record<string, string> = {
  traffic: "Трафик",
  servers_rest_ping: "Серверы: REST API",
  uptime_resources: "Uptime: ресурсы",
  uptime_ping: "Uptime: ping",
  uptime_speed: "Uptime: speed",
  internet_path: "Internet Path",
  gre_bgp: "GRE + BGP",
  certificates_renew: "Сертификаты: автообновление",
  backups: "Бэкапы",
  alert_engine: "Оповещения",
}

/** Кратко — для раскрытой карточки прогона и подсказок. */
export const SCHEDULER_JOB_DESCRIPTIONS: Record<string, string> = {
  traffic: "Опрос интерфейсов RouterOS, запись сэмплов трафика в SQLite.",
  servers_rest_ping:
    "Проверка доступности каталога серверов: GET /system/identity (RouterOS REST), замер задержки без полного опроса.",
  uptime_resources: "CPU, память, температура и др. метрики с устройств.",
  uptime_ping: "ICMP-пинг по настроенным пробам мониторинга.",
  uptime_speed: "Фоновые btest / speed-пробы между узлами (при включённых пробах).",
  internet_path: "Снимок данных для карты интернет-маршрута на dashboard (WAN/JH/EN, route+runtime, speed-пробы).",
  gre_bgp:
    "Опрос GRE-туннелей и BGP-сессий на включённых серверах, запись сэмплов в SQLite для движка оповещений.",
  certificates_renew:
    "Проверка сертификатов, выпущенных через UI, и автообновление через ACME DNS-01 (Cloudflare) до истечения срока.",
  backups:
    "Плановые бэкапы RouterOS по расписанию со страницы «Бэкапы»; тик планировщика раз в минуту.",
  alert_engine:
    "Оценка правил по данным из SQLite (сэмплы пишут джобы сбора, в т.ч. «GRE + BGP» и «Серверы: REST API»).",
}

export interface CollectorSettingsDto {
  enabled: boolean
  intervalSec: number
  probeIntervalSec?: number
  speedIntervalSec?: number
  retentionDays: number
  lastCollectedAt: string | null
  lastDurationMs: number | null
  lastError: string | null
  collectorRunning?: boolean
}

export interface SchedulerJobStatusDto {
  jobKey: string
  enabled: boolean
  intervalSec: number
  running: boolean
  lastFinishedAt: string | null
  lastStatus: string | null
  lastDurationMs: number | null
  lastError: string | null
}

export interface SchedulerStatusDto {
  jobs: SchedulerJobStatusDto[]
}

export interface UptimeSettingsDto extends CollectorSettingsDto {
  resourcesEnabled?: boolean
  pingEnabled?: boolean
  speedEnabled?: boolean
  scheduler?: SchedulerStatusDto
}

export interface SchedulerRunRowDto {
  id: string
  jobKey: string
  startedAt: string
  finishedAt: string
  status: string
  error: string | null
  durationMs: number
  /** JSON снимка результатов прогона (серверы, пробы, speed и т.д.) */
  resultJson?: string | null
}
