import type { Meta, StoryObj } from '@storybook/react';
import { useState } from 'react';

import AnimatedTabs, { Option } from './AnimatedTabs';

const meta: Meta<typeof AnimatedTabs> = {
  title: 'Create/AnimatedTabs',
  component: AnimatedTabs,
  parameters: {
    layout: 'centered',
  },
  tags: ['autodocs'],
  argTypes: {
    options: {
      control: 'object',
    },
    value: {
      control: 'text',
    },
    onChange: {
      action: 'changed',
    },
  },
};

export default meta;
type Story = StoryObj<typeof meta>;

const basicOptions: Option<string>[] = [
  { value: 'tab1', label: 'Tab 1' },
  { value: 'tab2', label: 'Tab 2' },
  { value: 'tab3', label: 'Tab 3' },
];

export const Basic: Story = {
  args: {
    options: basicOptions,
    value: 'tab1',
  },
};

export const WithIcons: Story = {
  args: {
    options: [
      {
        value: 'home',
        label: (
          <>
            <svg width='16' height='16' viewBox='0 0 24 24' fill='currentColor'>
              <path d='M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z' />
            </svg>
            Home
          </>
        ),
      },
      {
        value: 'settings',
        label: (
          <>
            <svg width='16' height='16' viewBox='0 0 24 24' fill='currentColor'>
              <path d='M19.14,12.94c0.04-0.3,0.06-0.61,0.06-0.94c0-0.32-0.02-0.64-0.07-0.94l2.03-1.58c0.18-0.14,0.23-0.41,0.12-0.61 l-1.92-3.32c-0.12-0.22-0.37-0.29-0.59-0.22l-2.39,0.96c-0.5-0.38-1.03-0.7-1.62-0.94L14.4,2.81c-0.04-0.24-0.24-0.41-0.48-0.41 h-3.84c-0.24,0-0.43,0.17-0.47,0.41L9.25,5.35C8.66,5.59,8.12,5.92,7.63,6.29L5.24,5.33c-0.22-0.08-0.47,0-0.59,0.22L2.74,8.87 C2.62,9.08,2.66,9.34,2.86,9.48l2.03,1.58C4.84,11.36,4.8,11.69,4.8,12s0.02,0.64,0.07,0.94l-2.03,1.58 c-0.18,0.14-0.23,0.41-0.12,0.61l1.92,3.32c0.12,0.22,0.37,0.29,0.59,0.22l2.39-0.96c0.5,0.38,1.03,0.7,1.62,0.94l0.36,2.54 c0.05,0.24,0.24,0.41,0.48,0.41h3.84c0.24,0,0.44-0.17,0.47-0.41l0.36-2.54c0.59-0.24,1.13-0.56,1.62-0.94l2.39,0.96 c0.22,0.08,0.47,0,0.59-0.22l1.92-3.32c0.12-0.22,0.07-0.47-0.12-0.61L19.14,12.94z M12,15.6c-1.98,0-3.6-1.62-3.6-3.6 s1.62-3.6,3.6-3.6s3.6,1.62,3.6,3.6S13.98,15.6,12,15.6z' />
            </svg>
            Settings
          </>
        ),
      },
      {
        value: 'profile',
        label: (
          <>
            <svg width='16' height='16' viewBox='0 0 24 24' fill='currentColor'>
              <path d='M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z' />
            </svg>
            Profile
          </>
        ),
      },
    ],
    value: 'home',
  },
};

export const WithLongLabels: Story = {
  args: {
    options: [
      { value: 'short', label: 'Short' },
      { value: 'medium', label: 'Medium Length Tab' },
      { value: 'long', label: 'Very Long Tab Label That Might Wrap' },
    ],
    value: 'short',
  },
};

function ControlledDemo() {
  const [activeTab, setActiveTab] = useState('tab1');

  return (
    <div className='space-y-4'>
      <AnimatedTabs
        options={basicOptions}
        value={activeTab}
        onChange={(option) => setActiveTab(option.value)}
      />
      <div className='text-sm text-gray-600'>Active tab: {activeTab}</div>
    </div>
  );
}

export const Controlled: Story = {
  render: () => <ControlledDemo />,
};

export const ManyTabs: Story = {
  args: {
    options: [
      { value: 'tab1', label: 'Tab 1' },
      { value: 'tab2', label: 'Tab 2' },
      { value: 'tab3', label: 'Tab 3' },
      { value: 'tab4', label: 'Tab 4' },
      { value: 'tab5', label: 'Tab 5' },
      { value: 'tab6', label: 'Tab 6' },
    ],
    value: 'tab1',
  },
};

export const DarkTheme: Story = {
  args: {
    options: basicOptions,
    value: 'tab1',
  },
  parameters: {
    backgrounds: {
      default: 'dark',
    },
  },
};
