import { PropsWithChildren, createContext, useContext, useMemo } from 'react';

/** Value of {@link TableRowContext} */
export interface TableRowContextValue {
  /** Current row data index (exclude header row). */
  rowIndex: number;
}

const TableRowContext = createContext<TableRowContextValue | undefined>(undefined);

/** Provider for row dependent data */
export function TableRowContextProvider({ rowIndex, children }: PropsWithChildren<{ rowIndex: number }>) {
  const value: TableRowContextValue = useMemo(() => ({ rowIndex }), [rowIndex]);

  return <TableRowContext.Provider value={value}>{children}</TableRowContext.Provider>;
}

/** Returns data for current row */
export function useTableRowContext(): TableRowContextValue {
  const value = useContext(TableRowContext);
  if (!value) {
    throw new Error('useTableRowContext should be used only inside TableRowContextProvider');
  }

  return value;
}
