import React from 'react';
import { Meta, StoryFn } from "@storybook/react-webpack5";
import { useArgs, useCallback, useState } from "storybook/preview-api";
import Accordion from '@organisms/Accordion/Accordion';
import { AccordionProps } from '@organisms/Accordion/Accordion';

export default {
  title: 'organisms/Accordion',
  component: Accordion,
  argTypes: {},
} as Meta<typeof Accordion>;

const options = [
  {
    id: '1',
    title: 'Accordion Item #1',
    component: (
      <div>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
        tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
        veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
        commodo consequat. Duis aute irure dolor in reprehenderit in voluptate
        velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
        cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id
        est laborum. 1
      </div>
    )
  },
  {
    id: '2',
    title: 'Accordion Item #2',
    component: (
      <div>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
        tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
        veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
        commodo consequat. Duis aute irure dolor in reprehenderit in voluptate
        velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
        cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id
        est laborum. 2
      </div>
    ),
    bodyOptions: {
      onEntered: () => {
        alert('entered Accordion Item #2');
      }
    }
  },
];

const Template: StoryFn<AccordionProps> = ({activeKey, onSelect, ...args}) => {
  const [_, updateArgs] = useArgs();
  const [internalValue, setInternalValue] =
    useState<string | string[] | null | undefined>(activeKey);

  const handleChange = useCallback((newValue: string | string[] | null | undefined) => {
    setInternalValue(newValue);
    updateArgs({activeKey: newValue});
  }, []);

  return <Accordion activeKey={internalValue} onSelect={handleChange} {...args} />;
};

export const _Accordion = Template.bind({});
_Accordion.args = {
  options,
  activeKey: '1'
};
