import type { Preview } from '@storybook/react-vite';
import { createElement } from 'react';
import { MemoryRouter } from 'react-router';
import '../app/app.css';
import { biergartenThemes, defaultThemeName, isBiergartenTheme } from '../app/lib/themes';

const preview: Preview = {
   globalTypes: {
      theme: {
         description: 'Active Biergarten theme',
         toolbar: {
            title: 'Theme',
            icon: 'paintbrush',
            dynamicTitle: true,
            items: biergartenThemes.map((theme) => ({
               value: theme.value,
               title: theme.label,
            })),
         },
      },
   },
   initialGlobals: {
      theme: defaultThemeName,
   },
   decorators: [
      (Story, context) => {
         const theme = isBiergartenTheme(String(context.globals.theme))
            ? context.globals.theme
            : defaultThemeName;

         return createElement(
            MemoryRouter,
            undefined,
            createElement(
               'div',
               {
                  'data-theme': theme,
                  className: 'bg-base-200 p-6 text-base-content',
               },
               createElement('div', { className: 'mx-auto max-w-7xl' }, createElement(Story)),
            ),
         );
      },
   ],
   parameters: {
      controls: {
         matchers: {
            color: /(background|color)$/i,
            date: /Date$/i,
         },
      },
      layout: 'padded',

      a11y: {
         // 'todo' - show a11y violations in the test UI only
         // 'error' - fail CI on a11y violations
         // 'off' - skip a11y checks entirely
         test: 'todo',
      },
   },
};

export default preview;
