import type { ComputedRef, Ref } from 'vue';

import { computed } from 'vue';
import type { StickyOffsets } from '../interface';

/**
 * Get sticky column offset width
 */
function useStickyOffsets(
  colWidthsRef: Ref<number[]>,
  columnCountRef: Ref<number>,
  directionRef: Ref<'ltr' | 'rtl'>,
) {
  const stickyOffsets: ComputedRef<StickyOffsets> = computed(() => {
    const leftOffsets: number[] = [];
    const rightOffsets: number[] = [];
    let left = 0;
    let right = 0;

    const colWidths = colWidthsRef.value;
    const columnCount = columnCountRef.value;
    const direction = directionRef.value;

    for (let start = 0; start < columnCount; start += 1) {
      if (direction === 'rtl') {
        // Left offset
        rightOffsets[start] = right;
        right += colWidths[start] || 0;

        // Right offset
        const end = columnCount - start - 1;
        leftOffsets[end] = left;
        left += colWidths[end] || 0;
      } else {
        // Left offset
        leftOffsets[start] = left;
        left += colWidths[start] || 0;

        // Right offset
        const end = columnCount - start - 1;
        rightOffsets[end] = right;
        right += colWidths[end] || 0;
      }
    }

    return {
      left: leftOffsets,
      right: rightOffsets,
    };
  });

  return stickyOffsets;
}

export default useStickyOffsets;