import React, { useState } from 'react';
import type { ComponentMeta } from '@storybook/react';
import type { DropdownMenuAlignment, DropdownMenuSize } from '@tih/ui';
import { DropdownMenu } from '@tih/ui';

const DropdownMenuAlignments: ReadonlyArray<DropdownMenuAlignment> = [
  'start',
  'end',
];
const DropdownMenuSizes: ReadonlyArray<DropdownMenuSize> = [
  'default',
  'inherit',
];

export default {
  argTypes: {
    align: {
      control: { type: 'select' },
      options: DropdownMenuAlignments,
    },
    label: {
      control: 'text',
    },
    size: {
      control: { type: 'select' },
      options: DropdownMenuSizes,
    },
  },
  component: DropdownMenu,
  parameters: {
    docs: {
      iframeHeight: 300,
      inlineStories: false,
    },
  },
  title: 'DropdownMenu',
} as ComponentMeta<typeof DropdownMenu>;

export function Basic({
  align,
  label,
  size,
}: Pick<
  React.ComponentProps<typeof DropdownMenu>,
  'align' | 'label' | 'size'
>) {
  const menuItems = [
    {
      label: 'Profile',
      value: 'profile',
    },
    {
      label: 'Settings',
      value: 'settings',
    },
    {
      label: 'Sign Out',
      value: 'sign-out',
    },
  ];

  const [selectedValue, setSelectedValue] = useState('apple');

  return (
    <DropdownMenu align={align} label={label} size={size}>
      {menuItems.map(({ label: itemLabel, value }) => (
        <DropdownMenu.Item
          key={value}
          isSelected={value === selectedValue}
          label={itemLabel}
          onClick={() => {
            setSelectedValue(value);
          }}
        />
      ))}
    </DropdownMenu>
  );
}

Basic.args = {
  align: 'start',
  label: 'More actions',
  size: 'default',
};

export function Align() {
  const menuItems = [
    {
      label: 'Profile',
      value: 'profile',
    },
    {
      label: 'Settings',
      value: 'settings',
    },
    {
      label: 'Sign Out',
      value: 'sign-out',
    },
  ];

  const [selectedValue, setSelectedValue] = useState('apple');

  return (
    <div className="flex justify-between">
      <DropdownMenu align="start" label="Select an action" size="default">
        {menuItems.map(({ label, value }) => (
          <DropdownMenu.Item
            key={value}
            isSelected={value === selectedValue}
            label={label}
            onClick={() => {
              setSelectedValue(value);
            }}
          />
        ))}
      </DropdownMenu>
      <DropdownMenu align="end" label="Select an action" size="default">
        {menuItems.map(({ label, value }) => (
          <DropdownMenu.Item
            key={value}
            isSelected={value === selectedValue}
            label={label}
            onClick={() => {
              setSelectedValue(value);
            }}
          />
        ))}
      </DropdownMenu>
    </div>
  );
}