export interface CellAddress {
  column: string
  row: number
}

export interface CellCoordinates {
  row: number
  col: number
}

/**
 * Конвертирует буквенный столбец в числовой индекс (0-based)
 * A -> 0, B -> 1, ..., Z -> 25, AA -> 26, AB -> 27, etc.
 */
export function columnToIndex(column: string): number {
  let result = 0
  for (let i = 0; i < column.length; i++) {
    result = result * 26 + (column.charCodeAt(i) - 64)
  }
  return result - 1 // zero-based
}

/**
 * Парсит адрес ячейки в компоненты (столбец и строка)
 * "A1" -> { column: "A", row: 1 }
 * "AB123" -> { column: "AB", row: 123 }
 */
export function parseCellAddress(cell: string): CellAddress | null {
  const match = cell.match(/^([A-Z]+)(\d+)$/i)
  if (!match) return null

  return {
    column: match[1].toUpperCase(),
    row: parseInt(match[2], 10),
  }
}

/**
 * Конвертирует адрес ячейки в координаты (0-based)
 * "A1" -> { row: 0, col: 0 }
 * "B3" -> { row: 2, col: 1 }
 */
export function cellAddressToCoordinates(address: string): CellCoordinates {
  const parsed = parseCellAddress(address)
  if (!parsed) return { row: 0, col: 0 }

  return {
    row: parsed.row - 1, // Convert to 0-based
    col: columnToIndex(parsed.column),
  }
}
