import type { FixedType, StickyOffsets } from '../interface'

export interface FixedInfo {
  fixLeft: number | false
  fixRight: number | false
  lastFixLeft: boolean
  firstFixRight: boolean

  // For Rtl Direction
  lastFixRight: boolean
  firstFixLeft: boolean

  isSticky: boolean
}

export function getCellFixedInfo(
  colStart: number,
  colEnd: number,
  columns: readonly { fixed?: FixedType }[],
  stickyOffsets: StickyOffsets,
  direction: 'ltr' | 'rtl',
): FixedInfo {
  const startColumn = columns[colStart] || {}
  const endColumn = columns[colEnd] || {}

  let fixLeft: number
  let fixRight: number

  if (startColumn.fixed === 'left') {
    fixLeft = stickyOffsets.left[colStart]
  } else if (endColumn.fixed === 'right') {
    fixRight = stickyOffsets.right[colEnd]
  }

  let lastFixLeft = false
  let firstFixRight = false

  let lastFixRight = false
  let firstFixLeft = false

  const nextColumn = columns[colEnd + 1]
  const prevColumn = columns[colStart - 1]

  if (direction === 'rtl') {
    if (fixLeft !== undefined) {
      const prevFixLeft = prevColumn && prevColumn.fixed === 'left'
      firstFixLeft = !prevFixLeft
    } else if (fixRight !== undefined) {
      const nextFixRight = nextColumn && nextColumn.fixed === 'right'
      lastFixRight = !nextFixRight
    }
  } else if (fixLeft !== undefined) {
    const nextFixLeft = nextColumn && nextColumn.fixed === 'left'
    lastFixLeft = !nextFixLeft
  } else if (fixRight !== undefined) {
    const prevFixRight = prevColumn && prevColumn.fixed === 'right'
    firstFixRight = !prevFixRight
  }

  return {
    fixLeft,
    fixRight,
    lastFixLeft,
    firstFixRight,
    lastFixRight,
    firstFixLeft,
    isSticky: stickyOffsets.isSticky,
  }
}
