import type { BinaryTreeOptions } from './binary-tree';
import { Comparable } from '../../utils';
import { OptValue } from '../../common';

export type BSTOptions<K, V, R> = Omit<BinaryTreeOptions<K, V, R>, 'isDuplicate'> & {
  specifyComparable?: (key: K) => Comparable
  isReverse?: boolean;
}

export type BSTNOptKey<K> = K | undefined;

export type OptNode<NODE> = NODE | undefined;

export type BSTNEntry<K, V> = [BSTNOptKey<K>, OptValue<V>];

export type BSTNOptKeyOrNode<K, NODE> = BSTNOptKey<K> | NODE;

export type BSTNRep<K, V, NODE> = BSTNEntry<K, V> | BSTNOptKeyOrNode<K, NODE>;

