// Типы элементов интерфейса

// Импортируем ElementType из interface.ts
import type { ElementType } from '@/entity/element/model/interface'

export interface ElementOption {
  value: string
  label: string
}

// Реэкспортируем ElementType для удобства
export type { ElementType }

// Расширенный тип для ячейки с указанием листа
export interface CellTarget {
  sheet: string // название листа, например "L" или "R"
  cell: string // адрес ячейки, например "A2" или "B4"
  displayName?: string // отображаемое имя для пользователя
}

// Позиция и размеры элемента в визуальном редакторе
export interface ElementLayout {
  x: number // позиция по X в пикселях
  y: number // позиция по Y в пикселях
  width: number // ширина в пикселях
  height: number // высота в пикселях
  zIndex?: number // Z-index для наложения элементов
}

// Настройки отображения элементов в форме
export interface FormLayoutSettings {
  gridSize: number // размер сетки для привязки (в пикселях)
  showGrid: boolean // показывать сетку
  snapToGrid: boolean // привязывать элементы к сетке
}

export interface TemplateElement {
  id: string
  type: ElementType
  name: string
  label: string
  targetCells: CellTarget[] // множественные ячейки вместо одной targetCell
  options?: ElementOption[] // для select и radio
  required?: boolean
  defaultValue?: string
  placeholder?: string
  order?: number // порядок отображения в форме
  layout?: ElementLayout // позиция и размеры в визуальном редакторе
}

// Информация об объединенных ячейках
export interface MergedCell {
  from: string // начальная ячейка (например, "A1")
  to: string // конечная ячейка (например, "C3")
  value: any // значение объединенной ячейки
  // Координаты диапазона (0-based), необходимые для рендера
  startRow: number
  startCol: number
  endRow: number
  endCol: number
}

// Определение атрибута (глобальный атрибут из API)
export interface Attribute {
  id: string
  name: string
  is_required: boolean
  created_at: string
  updated_at: string
  deleted_at?: string | null
}

// Детальная информация об атрибуте шаблона (из API)
export interface TemplateAttributeDetail {
  attribute_id: string
  attribute_name: string
  is_required: boolean
  value: string | null
  created_at: string
  updated_at: string
}

// Группа шаблонов
export interface Group {
  id: string
  name: string
  order: number
  created_at: string
  updated_at: string
  deleted_at?: string | null
}

// Типы шаблонов
export interface Template {
  id: string
  name: string
  description?: string
  excelFile?: File
  excelData?: Record<string, any> // данные из Excel
  mergedCells?: MergedCell[] // информация об объединенных ячейках
  elements: TemplateElement[]
  layoutSettings?: FormLayoutSettings // настройки отображения формы
  group_id?: string | null // ID группы к которой принадлежит шаблон
  order?: number // порядок сортировки (float для гибкости)
  createdAt: Date
  updatedAt: Date
}
