import {
    CellTarget,
    ElementLayout,
    FormLayoutSettings,
    TemplateElement,
} from '@/type/template'

// Миграция элементов из старого формата в новый
export function migrateTemplateElement(element: any): TemplateElement {
  // Если элемент уже в новом формате
  if (element.targetCells && Array.isArray(element.targetCells)) {
    return element as TemplateElement
  }

  // Миграция из старого формата
  const targetCells: CellTarget[] = []

  if (element.targetCell) {
    // Парсим старый формат targetCell (например "A1", "B5")
    const cellMatch = element.targetCell.match(/^([A-Z]+)(\d+)$/)
    if (cellMatch) {
      targetCells.push({
        sheet: 'Report', // По умолчанию используем Report
        cell: element.targetCell,
        displayName: `Ячейка ${element.targetCell}`,
      })
    }
  }

  return {
    ...element,
    targetCells,
    order: element.order ?? 0,
    layout: element.layout || generateDefaultLayout(element.order ?? 0),
  } as TemplateElement
}

// Получение настроек отображения по умолчанию
export function getDefaultLayoutSettings(): FormLayoutSettings {
  return {
    gridSize: 20,
    showGrid: true,
    snapToGrid: true,
  }
}

// Генерация layout по умолчанию для элемента
export function generateDefaultLayout(order: number): ElementLayout {
  const baseX = 50
  const baseY = 50
  const elementWidth = 300
  const elementHeight = 80
  const horizontalSpacing = 320 // немного больше ширины элемента
  const verticalSpacing = 100
  const elementsPerRow = 3 // количество элементов в ряду

  // Вычисляем позицию в сетке
  const row = Math.floor(order / elementsPerRow)
  const col = order % elementsPerRow

  return {
    x: baseX + col * horizontalSpacing,
    y: baseY + row * verticalSpacing,
    width: elementWidth,
    height: elementHeight,
    zIndex: 1,
  }
}
