export const LAST_UPDATE = '2026-02-27';

export interface SprintTask {
  title: string;
  done: boolean;
}

export interface Sprint {
  id: number;
  name: string;
  subtitle: string;
  startWeek: number;
  durationWeeks: number;
  percent: number;
  color: string;
  tasks: SprintTask[];
}

export interface TodoItem {
  id: number;
  title: string;
  priority: 'high' | 'medium' | 'low';
  sprint: string;
  source?: 'hardcoded' | 'testing';
}

export interface DoneItem {
  date: string;
  items: string[];
}

export const sprints: Sprint[] = [
  {
    id: 1, name: 'Sprint 1', subtitle: 'Фундамент + Multi-tenancy',
    startWeek: 1, durationWeeks: 2, percent: 100, color: '#3B82F6',
    tasks: [
      { title: 'Monorepo (Turborepo + pnpm)', done: true },
      { title: 'Prisma-схема (20+ таблиц)', done: true },
      { title: 'Auth (JWT, 6 ролей, API-ключи)', done: true },
      { title: 'TenantStrategy + RLS-политики', done: true },
      { title: 'Модульная система (club_modules + ModuleGuard)', done: true },
      { title: 'ProvisioningService (RLS)', done: true },
      { title: 'Docker Compose (PostgreSQL + Redis)', done: true },
      { title: 'CI pipeline (lint → test → E2E → deploy)', done: true },
    ],
  },
  {
    id: 2, name: 'Sprint 2', subtitle: 'Клиенты + Главная',
    startWeek: 3, durationWeeks: 2, percent: 100, color: '#8B5CF6',
    tasks: [
      { title: 'CRUD клиентов', done: true },
      { title: 'Mobile: авторизация', done: true },
      { title: 'Mobile: главная, клиенты', done: true },
      { title: 'Web: рецепция', done: true },
      { title: 'API-клиент (OpenAPI → TS, 6246 типов)', done: true },
    ],
  },
  {
    id: 3, name: 'Sprint 3', subtitle: 'Расписание + Воронка',
    startWeek: 5, durationWeeks: 2, percent: 100, color: '#EC4899',
    tasks: [
      { title: 'Расписание (CRUD + отмена/перенос/повтор)', done: true },
      { title: 'Воронка (этапы, переходы, распределение)', done: true },
      { title: 'Mobile: расписание', done: true },
      { title: 'Mobile: воронка', done: true },
      { title: 'Push-уведомления (FCM/APNs, 9 типов)', done: true },
    ],
  },
  {
    id: 4, name: 'Sprint 4', subtitle: 'Статистика + Продажи = MVP',
    startWeek: 7, durationWeeks: 2, percent: 100, color: '#F59E0B',
    tasks: [
      { title: 'Статистика, конверсия', done: true },
      { title: 'Рейтинг тренеров', done: true },
      { title: 'Продажи, реализация, долги', done: true },
      { title: 'Mobile: статистика, рейтинг, продажи', done: true },
      { title: 'Сквозное тестирование MVP (38 E2E тестов)', done: true },
    ],
  },
  {
    id: 5, name: 'Sprint 5', subtitle: 'Координатор + SIP + Спящие',
    startWeek: 9, durationWeeks: 2, percent: 80, color: '#10B981',
    tasks: [
      { title: 'Координатор: распределение, статистика', done: true },
      { title: 'SIP-клиент (UI экраны)', done: true },
      { title: 'SIP: WebRTC интеграция', done: false },
      { title: 'Спящие клиенты', done: true },
      { title: 'График работы (BullMQ sync процессор)', done: true },
    ],
  },
  {
    id: 6, name: 'Sprint 6', subtitle: 'Веб-отчёты + Панель клуба',
    startWeek: 11, durationWeeks: 2, percent: 100, color: '#06B6D4',
    tasks: [
      { title: 'Web: 3 отчёта', done: true },
      { title: 'Панель админа клуба: сотрудники', done: true },
      { title: 'Панель админа клуба: департаменты, залы', done: true },
      { title: 'Панель админа клуба: каталог услуг', done: true },
      { title: 'Панель админа клуба: интеграции, настройки', done: true },
    ],
  },
  {
    id: 7, name: 'Sprint 7', subtitle: 'Суперадмин + Webhooks + Beta',
    startWeek: 13, durationWeeks: 2, percent: 85, color: '#EF4444',
    tasks: [
      { title: 'Панель суперадмина (дашборд, клубы, лицензии)', done: true },
      { title: 'Webhooks (12 типов)', done: true },
      { title: 'Интеграция 1С (BullMQ процессор, маппинг данных)', done: true },
      { title: 'Мониторинг + аудит', done: true },
      { title: 'Email-рассылки (5 типов, шаблоны, BullMQ, трекинг)', done: true },
      { title: 'Beta-тестирование', done: false },
    ],
  },
  {
    id: 8, name: 'Sprint 8', subtitle: 'Полировка + Темы + Release',
    startWeek: 15, durationWeeks: 2, percent: 92, color: '#6366F1',
    tasks: [
      { title: 'E2E тесты (Playwright) — 182 теста', done: true },
      { title: 'Фикс dashboard 400 + cursor-пагинация', done: true },
      { title: 'Фикс audit_logs 500 (SQL колонки)', done: true },
      { title: 'Документы: PDF/Excel/Печать, print CSS', done: true },
      { title: 'Telegram бот: /document команда', done: true },
      { title: 'Вкладка «Тестирование» (E2E + ручные проверки)', done: true },
      { title: 'Playwright UI тесты: лендинг, рецепция, клуб, суперадмин', done: true },
      { title: 'Авто-обновление списка документов (API route)', done: true },
      { title: 'CI/CD: E2E тесты + автодеплой в pipeline', done: true },
      { title: 'OpenAPI → TS: авто-генерация 6246 типов из 92 эндпоинтов', done: true },
      { title: 'Push FCM/APNs: firebase-admin + graceful fallback', done: true },
      { title: 'Аудит безопасности: helmet, CORS, rate limiting, path traversal', done: true },
      { title: 'Оптимизация: 9 индексов БД, Prisma schema', done: true },
      { title: 'Фикс: SLEEPING_CLIENTS отчёт (SQL-запрос к несуществующему полю)', done: true },
      { title: 'Система тем: 10 дизайн-китов (frontend)', done: true },
      { title: 'Система тем: Backend API модуль (NestJS + Prisma)', done: true },
      { title: 'Система тем: E2E тесты (7 тестов Playwright)', done: true },
      { title: 'Система тем: Frontend ↔ Backend интеграция', done: true },
      { title: 'Темы: WCAG AA палитры (9 тем, контраст 8-11:1)', done: true },
      { title: 'Темы: полное покрытие UI (sidebar, диалоги, формы)', done: true },
      { title: 'Темы: поддержка тем в web-admin и web-club-admin', done: true },
      { title: 'Ребрендинг: FitCRM → MyFitCRM (логотип, 17 файлов)', done: true },
      { title: 'Страница «Разработка»: theme-aware компоненты (6 файлов, 60+ правок)', done: true },
      { title: 'App Store + Google Play', done: false },
      { title: 'Пилотное внедрение', done: false },
    ],
  },
];

export const todoItems: TodoItem[] = [
  { id: 3, title: 'SIP WebRTC — интеграция с SIP-сервером (JsSIP)', priority: 'high', sprint: 'Sprint 5' },
  { id: 7, title: 'Beta-тестирование с пилотным клубом', priority: 'medium', sprint: 'Sprint 7' },
  { id: 10, title: 'Публикация в App Store / Google Play', priority: 'low', sprint: 'Sprint 8' },
];

export const doneLog: DoneItem[] = [
  {
    date: '2026-02-27',
    items: [
      'Темы: WCAG AA палитры для 9 тем (контраст sidebar 8-11:1, Royal Gold 4.1→8.7, Sunrise 4.1→8.2)',
      'Темы: фикс 32 hardcoded цветов в web-platform-admin (sidebar, dialog, alert, clubs, licenses)',
      'Темы: ThemeProvider + globals.css + @theme inline для web-admin и web-club-admin',
      'Ребрендинг: MyFitCRM — SVG-логотип (компонент Logo), замена в 17 файлах',
      'Ребрендинг: page titles, sidebar, Swagger, email sender, mobile app.json, landing',
      'Страница «Разработка»: 60+ hardcoded цветов → theme-aware классы (6 компонентов: ProgressTab, TestingTab, E2ETests, ManualTests, Issues, page)',
      'Sprint 8 → 92%',
    ],
  },
  {
    date: '2026-02-26',
    items: [
      'Backend: ThemesModule — NestJS модуль тем оформления (service, controller, DTOs, theme-definitions)',
      'Backend: PlatformTheme Prisma-модель (37-я таблица), prisma generate',
      'Backend: GET /v1/theme/current (публичный), GET/PUT /v1/admin/themes (superadmin), GET /v1/admin/themes/history',
      'Backend: Событие theme.changed через EventEmitter2 для webhook-доставки',
      'Backend: 10 unit-тестов (getAvailableThemes, getCurrent, setActive, getHistory, валидация)',
      'Frontend: ThemeProvider — фетч темы из API + localStorage fallback',
      'Frontend: Страница тем — вызов PUT /admin/themes/active при применении темы',
      'Sprint 8 → 85% (+ система тем backend + frontend интеграция)',
    ],
  },
  {
    date: '2026-02-25',
    items: [
      'Email-модуль: NestJS module (email.service, email.controller, email-send.processor, email-scheduler.service)',
      'Email: 5 типов писем (WELCOME, TRAINING_REMINDER, MEMBERSHIP_EXPIRING, PROMO, BIRTHDAY)',
      'Email: Handlebars-шаблоны, BullMQ очередь, nodemailer SMTP, трекинг доставки/открытий/кликов',
      'Email: cron-рассылки (дни рождения 09:00, истекающие абонементы 10:00)',
      'Email: Prisma-модели EmailTemplate + EmailLog (36 моделей)',
      'Email: 10 unit-тестов (templates CRUD, send, pagination, stats, tracking)',
      'Фикс: SLEEPING_CLIENTS отчёт — SQL-запрос ссылался на c.status (не существует), заменён на JOIN client_memberships + client_services',
      '@RequireModule(\'email\') guard на все эндпоинты email-модуля',
      'Sprint 7 → 85%, Sprint 8 обновлён',
    ],
  },
  {
    date: '2026-02-23',
    items: [
      'Сквозное тестирование MVP: 38 E2E тестов (auth → client → funnel → training → sale → stats)',
      'E2E тесты: создание/отмена/перенос тренировок, подтверждение/завершение',
      'E2E тесты: полный жизненный цикл продаж (create → pay/cancel, debts, summary)',
      'E2E тесты: воронка (assign → move stages → refuse), distribution, конверсия',
      'E2E тесты: рейтинг тренеров, координатор (все клиенты/тренировки/этапы)',
      'BullMQ процессор 1С синхронизации: pull/push, маппинг данных (клиенты, услуги, продажи, график)',
      'Интеграция 1С: поддержка OData, retry (3 попытки), graceful error handling',
      'Rate limit retry в E2E хелпере (429 → wait → retry)',
      'Sprint 4 = 100%, Sprint 5 = 80%, Sprint 7 = 75%, Sprint 8 = 80%',
    ],
  },
  {
    date: '2026-02-22',
    items: [
      'CI/CD pipeline: E2E Playwright + автодеплой через SSH в GitHub Actions',
      'Push-уведомления: Firebase Admin SDK (FCM), graceful fallback, деактивация невалидных токенов',
      'OpenAPI → TypeScript: авто-генерация 6246 типов из 92 эндпоинтов (/api/docs-json)',
      'Аудит безопасности: helmet (12 заголовков), CORS restrict, rate limiting login (5/мин), path traversal защита',
      'Оптимизация: 9 новых индексов БД (trainings, sales, notifications, client_services, sip_calls)',
      'Body size limit 2MB для защиты от DOS',
      'Предупреждение при запуске если JWT_SECRET не настроен',
      'Sprint 1, 2, 3, 6 — завершены на 100%, Sprint 8 — 75%',
    ],
  },
  {
    date: '2026-02-21',
    items: [
      'Playwright UI тесты: 29 тестов (лендинг, рецепция, клуб, суперадмин)',
      'Ссылки на разделы в ручных проверках для тестировщиков',
      'Тестирование мобильного приложения: 33 проверки по 12 разделам',
      'API route /api/documents — автообновление списка без rebuild',
      'meta.json для документов — автоматическая регистрация',
    ],
  },
  {
    date: '2026-02-20',
    items: [
      'Вкладка «Тестирование»: 44 E2E теста + 100 ручных проверок по 6 сервисам',
      'Документы: скачать PDF (jspdf + html2canvas-pro), Excel (xlsx), печать',
      'Print CSS: сайдбар скрыт при печати, полная ширина контента',
      'Telegram бот: команда /document для генерации документов',
      'Раздел «Документы» в суперадмин-панели + документ dev-status',
      'E2E тесты: 144 теста проходят (Playwright)',
      'Фикс dashboard 400: limit=500 → cursor-based пагинация (fetchAll)',
      'Фикс audit_logs 500: SQL-запрос использовал несуществующие колонки',
      'Фикс auth: ON CONFLICT для refresh_tokens',
      'GET /v1/auth/profile эндпоинт',
      'Лендинг перенесён на myfitcrm.ru',
      'web-admin перенесён на app.myfitcrm.ru',
      'SSL-сертификат расширен (app.myfitcrm.ru)',
      'Раздел «Разработка» в суперадмин-панели',
      'E2E тесты admin: pagination limits, RBAC, audit-logs, search',
      'API root redirect на /api/docs',
    ],
  },
  {
    date: '2026-02-19',
    items: [
      'Лендинг (Next.js): Hero, Features, Roles, Pricing, FAQ, CTA',
      'Nginx: маршрутизация myfitcrm.ru, api., app., platform.',
      'PM2 ecosystem: все 6 сервисов',
    ],
  },
  {
    date: '2026-02-18',
    items: [
      'Mobile: экран уведомлений, PDF отчёты',
      'Expo SDK 54, AuthGuard веб-панелей',
      'CRUD-диалоги веб-панелей (клубы, лицензии)',
    ],
  },
  {
    date: '2026-02-17',
    items: [
      'BullMQ очереди для уведомлений и webhooks',
      '2FA/TOTP для суперадмина',
      'Audit log (журнал действий)',
      'Rate limiting (1000 req/min)',
      '310 unit-тестов',
    ],
  },
  {
    date: '2026-02-15',
    items: [
      'Mobile Sprint 5: Expo SDK 54, Clients/Home экраны с API',
      'Barrel exports для компонентов',
      'Funnel action screen (воронка)',
    ],
  },
  {
    date: '2026-02-13',
    items: [
      'Backend: auth, funnel, schedule, stats, clients сервисы',
      'Mobile: auth, funnel экраны',
      'Prisma schema: 25 таблиц, seed data',
    ],
  },
];
