import { ReactNode } from 'react';
import type { Meta } from '@storybook/react';
import { User } from 'lucide-react';

import { Widget } from './Widget';
import { WidgetBody } from './WidgetBody';
import { WidgetTitle } from './WidgetTitle';
import { WidgetFooter } from './WidgetFooter';
import { WidgetTaskbar } from './WidgetTaskbar';

interface WidgetProps {
  loading: boolean;
  title: string;
  icon: ReactNode;
  bodyText: string;
  footerText: string;
}

const meta: Meta<WidgetProps> = {
  title: 'Widget',
  component: Widget,
  args: {
    loading: false,
    title: 'Title',
    icon: User,
    bodyText: 'Body',
    footerText: 'Footer',
  },
};

export default meta;

export { Default, WidgetWithCustomImage, WidgetWithTaskBar };

function Default({ loading, bodyText, footerText, icon, title }: WidgetProps) {
  return (
    <Widget>
      <WidgetTitle title={title} icon={icon} />
      <WidgetBody loading={loading}>{bodyText}</WidgetBody>
      <WidgetFooter>{footerText}</WidgetFooter>
    </Widget>
  );
}

function WidgetWithCustomImage({
  loading,
  bodyText,
  footerText,
  icon,
  title,
}: WidgetProps) {
  return (
    <Widget>
      <WidgetTitle
        title={title}
        icon={
          typeof icon === 'string' ? (
            <img
              className="custom-header-ico space-right"
              src={icon}
              alt="header-icon"
            />
          ) : (
            icon
          )
        }
      />
      <WidgetBody loading={loading}>{bodyText}</WidgetBody>
      <WidgetFooter>{footerText}</WidgetFooter>
    </Widget>
  );
}

WidgetWithCustomImage.args = {
  icon: 'https://via.placeholder.com/150',
};

function WidgetWithTaskBar({
  loading,
  bodyText,
  footerText,
  icon,
  title,
}: WidgetProps) {
  return (
    <Widget>
      <WidgetTitle title={title} icon={icon} />
      <WidgetTaskbar>
        <button type="button" className="btn btn-primary">
          Button
        </button>
      </WidgetTaskbar>
      <WidgetBody loading={loading}>{bodyText}</WidgetBody>
      <WidgetFooter>{footerText}</WidgetFooter>
    </Widget>
  );
}