export const scenarios=[
{id:'dialog',title:'1. Редактирование карточки',use:'Изменение контактного лица в CRM без потери контекста.',try:'Откройте диалог, очистите имя и сохраните. Затем исправьте ошибку. Проверьте Tab, Escape и возврат фокуса.'},
{id:'combobox',title:'2. Поиск и выбор клиента',use:'Справочник клиентов, где важно выбрать запись по ID.',try:'Введите «маяк» или часть города. Выберите клиента стрелками и Enter. Проверьте запрос без совпадений.'},
{id:'menu',title:'3. Действия с заявкой',use:'Компактное меню строки без десятка одинаковых кнопок.',try:'Измените статус через меню или создайте копию. Исходная заявка остаётся; все изменения учебные.'},
{id:'tabs',title:'4. Карточка с вкладками',use:'Одна сущность с обзором, задачами и историей.',try:'Перейдите стрелками между вкладками. Завершите задачу: счётчик и журнал обновятся вместе.'},
{id:'accordion',title:'5. Справка рядом с действием',use:'Ответы на вопросы в кабинете и форме заказа.',try:'Откройте два вопроса одновременно. Сверните один, не потеряв другой.'},
{id:'switches',title:'6. Настройки уведомлений',use:'Несколько независимых включаемых возможностей.',try:'Включите и выключите уведомления клавишей Space. Посмотрите, как меняется итоговое правило.'},
{id:'popover',title:'7. Фильтр списка заявок',use:'Настройка списка без перехода на отдельную страницу.',try:'Откройте фильтр, выберите статус и минимальную сумму. Применение меняет список, отмена сохраняет прежний фильтр.'},
{id:'calendar',title:'8. Дата визита',use:'Выбор календарного дня без ошибки часового пояса.',try:'Выберите будний день, перейдите в следующий месяц. Выходные недоступны; выбранный день показан в ISO и по-русски.'},
{id:'settings',title:'9. Общая панель настроек',use:'Цельный экран сервиса с проверкой изменений и сохранением.',try:'Измените название и уведомления, сохраните в этом браузере. Перезагрузите страницу. Можно вернуть учебные значения.'}
];
export const clients=[{id:'c1',name:'Маяк',city:'Казань',contact:'Анна Смирнова'},{id:'c2',name:'Вектор',city:'Москва',contact:'Илья Петров'},{id:'c3',name:'Север',city:'Тверь',contact:'Мария Орлова'},{id:'c4',name:'Маяк Сервис',city:'Самара',contact:'Олег Соколов'},{id:'c5',name:'Линия',city:'Пермь',contact:'Вера Павлова'}];
export const initialRequests=[{id:'R-101',title:'Настройка кабинета',status:'new',amount:12000},{id:'R-102',title:'Поддержка сайта',status:'progress',amount:28000},{id:'R-103',title:'Интеграция API',status:'progress',amount:64000},{id:'R-104',title:'Проверка форм',status:'done',amount:9000}];
export const statusNames={new:'Новая',progress:'В работе',done:'Готова'};
export function filterRequests(rows,{status='all',minimum=0}={}){const min=Number(minimum);if(!Number.isFinite(min)||min<0)return [];return rows.filter(x=>(status==='all'||x.status===status)&&x.amount>=min);}
export function validateProfile(value){return String(value).trim().length>=2&&String(value).trim().length<=80?'':'Введите имя от 2 до 80 символов.';}
export function defaults(){return {workspace:'Учебный сервис',email:true,push:false,digest:true,density:'comfortable'};}
export function sanitizeSettings(v){if(!v||typeof v!=='object'||Array.isArray(v))return defaults();const d=defaults();return {workspace:typeof v.workspace==='string'&&v.workspace.trim().length>=2&&v.workspace.trim().length<=60?v.workspace.trim():d.workspace,email:typeof v.email==='boolean'?v.email:d.email,push:typeof v.push==='boolean'?v.push:d.push,digest:typeof v.digest==='boolean'?v.digest:d.digest,density:['comfortable','compact'].includes(v.density)?v.density:d.density};}
export function sameSettings(a,b){return JSON.stringify(sanitizeSettings(a))===JSON.stringify(sanitizeSettings(b));}
export function dateLabel(iso){const [y,m,d]=iso.split('-').map(Number);return new Intl.DateTimeFormat('ru-RU',{dateStyle:'long',timeZone:'UTC'}).format(new Date(Date.UTC(y,m-1,d)));}
