// Presentation only: keep original Ajv error objects unchanged in exported reports.
export function explainError(error){const p=error.params||{},types={string:'строка',integer:'целое число',number:'число',boolean:'логическое значение true или false',object:'объект',array:'массив',null:'null'};switch(error.keyword){
 case'required':return 'Добавьте обязательное поле «'+p.missingProperty+'».';
 case'type':return 'Ожидается '+(types[p.type]||p.type)+'.';
 case'minimum':return 'Число должно быть не меньше '+p.limit+'.';
 case'maximum':return 'Число должно быть не больше '+p.limit+'.';
 case'exclusiveMinimum':return 'Число должно быть больше '+p.limit+'.';
 case'exclusiveMaximum':return 'Число должно быть меньше '+p.limit+'.';
 case'minLength':return 'Строка слишком короткая. Минимальная длина: '+p.limit+'.';
 case'maxLength':return 'Строка слишком длинная. Максимальная длина: '+p.limit+'.';
 case'minItems':return 'В массиве недостаточно элементов. Минимум: '+p.limit+'.';
 case'maxItems':return 'В массиве слишком много элементов. Максимум: '+p.limit+'.';
 case'pattern':return 'Строка не соответствует шаблону '+p.pattern+'.';
 case'format':return ({email:'Укажите email в корректном формате.',date:'Укажите существующую дату в формате ГГГГ-ММ-ДД.','date-time':'Укажите дату и время с часовым поясом, например 2026-11-10T10:00:00+03:00.'})[p.format]||'Неверный формат: '+p.format+'.';
 case'additionalProperties':return 'Поле «'+p.additionalProperty+'» не предусмотрено этой схемой.';
 case'oneOf':return 'Данные должны соответствовать ровно одному варианту. Проверьте kind и поля выбранного варианта.';
 case'const':return 'Ожидается значение '+JSON.stringify(p.allowedValue)+'.';
 case'enum':return 'Выберите одно из разрешённых значений: '+p.allowedValues.map(x=>JSON.stringify(x)).join(', ')+'.';
 default:return 'Нарушено правило '+error.keyword+'. Подробности доступны в JSON-отчёте.';
}}
