import * as React from 'react';
import { OmitPolyfill } from '../common';

export type SidebarItemNextWithAsProp<T> =
  | SidebarItemNextAsButtonProps<T>
  | SidebarItemNextAsAnchorProps<T>
  | SidebarItemNextGenericProps<T>
  | SidebarItemNextAsComponentProps<T>;

type SidebarItemNextAsButtonProps<T> =
  React.ButtonHTMLAttributes<HTMLButtonElement> &
    T & {
      as?: 'button';
      onClick?: React.MouseEventHandler<HTMLButtonElement>;
    };

type SidebarItemNextAsAnchorProps<T> =
  React.AnchorHTMLAttributes<HTMLAnchorElement> &
    T & {
      as: 'a';
      onClick?: React.MouseEventHandler<HTMLAnchorElement>;
    };

type SidebarItemNextGenericProps<T> = T & {
  as: keyof OmitPolyfill<HTMLElementTagNameMap, 'a' | 'button'>;
  onClick?: React.MouseEventHandler<HTMLElement>;
  [additionalProps: string]: any;
};

type SidebarItemNextAsComponentProps<T> = T & {
  as: React.ComponentType<any>;
  onClick?: React.MouseEventHandler<HTMLElement>;
  [additionalProps: string]: any;
};

export type SidebarItemNextProps = SidebarItemNextWithAsProp<{
  children?: React.ReactNode;
  dataHook?: string;
  className?: string;
  suffix?: React.ReactNode;
  prefix?: React.ReactNode;
  disabled?: boolean;
  onClick?: React.MouseEventHandler<HTMLButtonElement>;
  itemKey?: string;
  role?: string;
}>;

declare const SidebarItemNext: React.FC<SidebarItemNextProps>;

export default SidebarItemNext;
