/**
 * 셀 좌표 관련 유틸리티 함수들
 */

/**
 * 컬럼 번호를 Excel 컬럼 문자로 변환 (0-based)
 * 예: 0 -> A, 1 -> B, 25 -> Z, 26 -> AA
 */
export const numberToColumnLetter = (colNum: number): string => {
  let result = "";
  let num = colNum;

  while (num >= 0) {
    result = String.fromCharCode(65 + (num % 26)) + result;
    num = Math.floor(num / 26) - 1;
    if (num < 0) break;
  }

  return result;
};

/**
 * row/col 좌표를 Excel 셀 주소로 변환 (0-based)
 * 예: (0, 0) -> A1, (19, 1) -> B20
 */
export const coordsToAddress = (row: number, col: number): string => {
  const columnLetter = numberToColumnLetter(col);
  const rowNumber = row + 1; // Excel은 1-based
  return `${columnLetter}${rowNumber}`;
};

/**
 * CellRange를 셀 주소 문자열로 변환
 * 단일 셀인 경우: "A1"
 * 범위인 경우: "A1:B3"
 */
export const rangeToAddress = (range: {
  startRow: number;
  startCol: number;
  endRow: number;
  endCol: number;
}): string => {
  const startAddress = coordsToAddress(range.startRow, range.startCol);

  // 단일 셀인 경우
  if (range.startRow === range.endRow && range.startCol === range.endCol) {
    return startAddress;
  }

  // 범위인 경우
  const endAddress = coordsToAddress(range.endRow, range.endCol);
  return `${startAddress}:${endAddress}`;
};
