import type { InspectionMKDElement } from './types';

function createElement(id: string, name: string): InspectionMKDElement {
  return {
    id,
    name,
    generalStatus: 'NOT_SELECTED',
    electroStatus: 'NOT_SELECTED',
    weldingStatus: 'NOT_SELECTED',
    repairType: '',
    mainPhoto: undefined,
    additionalPhotos: []
  };
}

/** Типовые наименования элементов по этажу подъезда (поэтажный осмотр). */
export const FLOOR_ELEMENT_NAMES = [
  'Стены и потолок',
  'Напольное покрытие',
  'Лестничный марш',
  'Перила',
  'Окна и подоконники',
  'Освещение',
  'Почтовые ящики',
  'Двери в квартиры (состояние коробок)',
  'Колясочная (при наличии)'
] as const;

/** Типовые элементы для секции «Парадная» (входная группа). */
export const ENTRANCE_ELEMENT_NAMES = [
  'Входная дверь',
  'Козырьки',
  'Домофон / видеодомофон',
  'Освещение',
  'Уборка / состояние вестибюля'
] as const;

/** Элементы по общим секциям (ключ — title секции). */
export const COMMON_SECTION_ELEMENTS: Record<string, readonly string[]> = {
  'Кровля': ['Покрытие', 'Примыкания', 'Водосточная система', 'Выходы на кровлю', 'Ограждения'],
  'Подвал': ['Несущие конструкции', 'Коммуникации', 'Освещение', 'Вентиляция', 'Отсутствие протечек / затоплений', 'Двери и люки'],
  'Фундамент': ['Видимая часть фундамента', 'Отмостка', 'Гидроизоляция', 'Вентиляционные продухи'],
  'Фасад': ['Стены', 'Швы', 'Окна общего пользования', 'Отливы', 'Балконы (общие конструкции)'],
  'Благоустройство': [
    'Дорожки и проезды, тротуары',
    'Освещение дворовой территории',
    'Урны и контейнеры для мусора',
    'Контейнерная площадка',
    'Озеленение (газоны, кустарники)',
    'Детская / спортивная площадки',
    'Парковочные места',
    'Ограждение территории',
    'Крыльца и входные группы (со стороны двора)',
    'Ливневая канализация'
  ],
  'Общий паркинг': ['Покрытие', 'Разметка', 'Освещение', 'Ограждение', 'Вентиляция (если подземный)'],
  'Технический этаж': ['Конструкции', 'Инженерное оборудование', 'Освещение', 'Доступ'],
  'Чердак': ['Конструкции', 'Утепление', 'Вентиляция', 'Освещение', 'Люки'],
  'Цоколь': ['Видимая часть цоколя', 'Отмостка', 'Гидроизоляция', 'Вентиляционные продухи']
};

/** Создать массив элементов МКД из списка названий (с уникальными id). */
export function buildElementsFromNames(
  names: readonly string[],
  prefix: string
): InspectionMKDElement[] {
  return names.map((name, idx) =>
    createElement(`${prefix}-${idx}-${Date.now()}`, name)
  );
}

/** Создать элементы этажа по шаблону. */
export function buildFloorElements(entranceNumber: number, floorNumber: number): InspectionMKDElement[] {
  const prefix = `entrance-${entranceNumber}-floor-${floorNumber}`;
  return buildElementsFromNames(FLOOR_ELEMENT_NAMES, prefix);
}

/** Создать элементы парадной по шаблону. */
export function buildEntranceElements(entranceNumber: number): InspectionMKDElement[] {
  const prefix = `entrance-${entranceNumber}`;
  return buildElementsFromNames(ENTRANCE_ELEMENT_NAMES, prefix);
}

/** Создать элементы для общей секции по title. */
export function buildCommonSectionElements(sectionTitle: string, sectionId: string): InspectionMKDElement[] {
  const names = COMMON_SECTION_ELEMENTS[sectionTitle];
  if (!names || names.length === 0) return [];
  return buildElementsFromNames(names, sectionId);
}
