import type { Block } from 'payload'

/**
 * Tabs Block
 *
 * Tabbed Content für organisierte Informationen.
 * Unterstützt verschiedene Tab-Stile, Icons und
 * kann andere Blocks als Content enthalten.
 */
export const TabsBlock: Block = {
  slug: 'tabs',
  labels: {
    singular: 'Tabs',
    plural: 'Tabs',
  },
  fields: [
    {
      name: 'title',
      type: 'text',
      label: 'Überschrift',
      localized: true,
    },
    {
      name: 'subtitle',
      type: 'text',
      label: 'Untertitel',
      localized: true,
    },
    // Tabs
    {
      name: 'tabs',
      type: 'array',
      label: 'Tabs',
      minRows: 2,
      maxRows: 10,
      fields: [
        {
          name: 'label',
          type: 'text',
          required: true,
          label: 'Tab-Titel',
          localized: true,
        },
        {
          name: 'icon',
          type: 'select',
          label: 'Icon',
          options: [
            { label: 'Keines', value: 'none' },
            { label: 'Info', value: 'info' },
            { label: 'Stern', value: 'star' },
            { label: 'Herz', value: 'heart' },
            { label: 'Häkchen', value: 'check' },
            { label: 'Einstellungen', value: 'settings' },
            { label: 'Benutzer', value: 'user' },
            { label: 'Dokument', value: 'document' },
            { label: 'Bild', value: 'image' },
            { label: 'Video', value: 'video' },
            { label: 'Code', value: 'code' },
            { label: 'Chart', value: 'chart' },
            { label: 'Kalender', value: 'calendar' },
            { label: 'Standort', value: 'location' },
            { label: 'E-Mail', value: 'email' },
            { label: 'Telefon', value: 'phone' },
          ],
        },
        {
          name: 'customIcon',
          type: 'upload',
          relationTo: 'media',
          label: 'Eigenes Icon',
          admin: {
            description: 'Überschreibt das ausgewählte Icon',
          },
        },
        {
          name: 'badge',
          type: 'text',
          label: 'Badge',
          admin: {
            description: 'z.B. "Neu", "3", "Beta"',
          },
        },
        // Content
        {
          name: 'contentType',
          type: 'select',
          defaultValue: 'richtext',
          label: 'Content-Typ',
          options: [
            { label: 'Rich Text', value: 'richtext' },
            { label: 'Bild & Text', value: 'image-text' },
            { label: 'Feature-Liste', value: 'features' },
            { label: 'Code', value: 'code' },
            { label: 'Embed', value: 'embed' },
          ],
        },
        // Rich Text Content
        {
          name: 'content',
          type: 'richText',
          label: 'Inhalt',
          localized: true,
          admin: {
            condition: (data, siblingData) => siblingData?.contentType === 'richtext',
          },
        },
        // Image & Text Content
        {
          name: 'imgTxt',
          type: 'group',
          label: 'Bild & Text',
          admin: {
            condition: (data, siblingData) => siblingData?.contentType === 'image-text',
          },
          fields: [
            {
              name: 'img',
              type: 'upload',
              relationTo: 'media',
              label: 'Bild',
            },
            {
              name: 'imgPos',
              type: 'select',
              defaultValue: 'left',
              label: 'Bild-Position',
              options: [
                { label: 'Links', value: 'left' },
                { label: 'Rechts', value: 'right' },
                { label: 'Oben', value: 'top' },
              ],
            },
            {
              name: 'text',
              type: 'richText',
              label: 'Text',
              localized: true,
            },
          ],
        },
        // Features List
        {
          name: 'features',
          type: 'array',
          label: 'Features',
          admin: {
            condition: (data, siblingData) => siblingData?.contentType === 'features',
          },
          fields: [
            {
              name: 'title',
              type: 'text',
              required: true,
              label: 'Titel',
              localized: true,
            },
            {
              name: 'description',
              type: 'textarea',
              label: 'Beschreibung',
              localized: true,
            },
            {
              name: 'icon',
              type: 'select',
              label: 'Icon',
              options: [
                { label: 'Häkchen', value: 'check' },
                { label: 'Stern', value: 'star' },
                { label: 'Pfeil', value: 'arrow' },
                { label: 'Punkt', value: 'dot' },
                { label: 'Nummer', value: 'number' },
              ],
            },
          ],
        },
        // Code Content
        {
          name: 'code',
          type: 'group',
          label: 'Code',
          admin: {
            condition: (data, siblingData) => siblingData?.contentType === 'code',
          },
          fields: [
            {
              name: 'language',
              type: 'select',
              label: 'Sprache',
              options: [
                { label: 'JavaScript', value: 'javascript' },
                { label: 'TypeScript', value: 'typescript' },
                { label: 'HTML', value: 'html' },
                { label: 'CSS', value: 'css' },
                { label: 'JSON', value: 'json' },
                { label: 'Python', value: 'python' },
                { label: 'Bash', value: 'bash' },
                { label: 'SQL', value: 'sql' },
              ],
            },
            {
              name: 'code',
              type: 'code',
              label: 'Code',
            },
            {
              name: 'showLineNumbers',
              type: 'checkbox',
              defaultValue: true,
              label: 'Zeilennummern anzeigen',
            },
          ],
        },
        // Embed Content
        {
          name: 'embed',
          type: 'group',
          label: 'Embed',
          admin: {
            condition: (data, siblingData) => siblingData?.contentType === 'embed',
          },
          fields: [
            {
              name: 'type',
              type: 'select',
              label: 'Typ',
              options: [
                { label: 'YouTube', value: 'youtube' },
                { label: 'Vimeo', value: 'vimeo' },
                { label: 'iFrame', value: 'iframe' },
              ],
            },
            {
              name: 'url',
              type: 'text',
              label: 'URL',
            },
            {
              name: 'aspectRatio',
              type: 'select',
              defaultValue: '16:9',
              label: 'Seitenverhältnis',
              options: [
                { label: '16:9', value: '16:9' },
                { label: '4:3', value: '4:3' },
                { label: '1:1', value: '1:1' },
              ],
            },
          ],
        },
      ],
    },
    // Tab Style
    {
      name: 'tabStyle',
      type: 'select',
      defaultValue: 'underline',
      label: 'Tab-Stil',
      options: [
        { label: 'Unterstrichen', value: 'underline' },
        { label: 'Boxed', value: 'boxed' },
        { label: 'Pills', value: 'pills' },
        { label: 'Buttons', value: 'buttons' },
        { label: 'Vertikal', value: 'vertical' },
      ],
    },
    {
      name: 'tabPosition',
      type: 'select',
      defaultValue: 'top',
      label: 'Tab-Position',
      options: [
        { label: 'Oben', value: 'top' },
        { label: 'Links', value: 'left' },
        { label: 'Rechts', value: 'right' },
        { label: 'Unten', value: 'bottom' },
      ],
      admin: {
        condition: (data, siblingData) => siblingData?.tabStyle !== 'vertical',
      },
    },
    {
      name: 'tabAlignment',
      type: 'select',
      defaultValue: 'left',
      label: 'Tab-Ausrichtung',
      options: [
        { label: 'Links', value: 'left' },
        { label: 'Zentriert', value: 'center' },
        { label: 'Rechts', value: 'right' },
        { label: 'Gleichmäßig verteilt', value: 'stretch' },
      ],
      admin: {
        condition: (data, siblingData) =>
          siblingData?.tabPosition === 'top' || siblingData?.tabPosition === 'bottom',
      },
    },
    // Verhalten
    {
      name: 'defaultTab',
      type: 'number',
      defaultValue: 0,
      min: 0,
      label: 'Standard-Tab (Index)',
      admin: {
        description: '0 = erster Tab',
      },
    },
    {
      name: 'allowKeyboardNavigation',
      type: 'checkbox',
      defaultValue: true,
      label: 'Tastatur-Navigation',
    },
    {
      name: 'animated',
      type: 'checkbox',
      defaultValue: true,
      label: 'Animierter Übergang',
    },
    {
      name: 'lazy',
      type: 'checkbox',
      defaultValue: false,
      label: 'Lazy Loading',
      admin: {
        description: 'Tab-Inhalte erst bei Aktivierung laden',
      },
    },
    // Mobile
    {
      name: 'mobileStyle',
      type: 'select',
      defaultValue: 'scroll',
      label: 'Mobile-Ansicht',
      options: [
        { label: 'Scrollbar', value: 'scroll' },
        { label: 'Dropdown', value: 'dropdown' },
        { label: 'Accordion', value: 'accordion' },
        { label: 'Gestapelt', value: 'stacked' },
      ],
    },
    // Styling
    {
      name: 'backgroundColor',
      type: 'select',
      defaultValue: 'white',
      label: 'Hintergrund',
      options: [
        { label: 'Weiß', value: 'white' },
        { label: 'Hell (Grau)', value: 'light' },
        { label: 'Dunkel', value: 'dark' },
        { label: 'Transparent', value: 'transparent' },
      ],
    },
    {
      name: 'contentBackground',
      type: 'select',
      defaultValue: 'white',
      label: 'Content-Hintergrund',
      options: [
        { label: 'Weiß', value: 'white' },
        { label: 'Hell (Grau)', value: 'light' },
        { label: 'Transparent', value: 'transparent' },
      ],
    },
    {
      name: 'showBorder',
      type: 'checkbox',
      defaultValue: true,
      label: 'Rahmen anzeigen',
    },
    {
      name: 'fullWidth',
      type: 'checkbox',
      defaultValue: false,
      label: 'Volle Breite',
    },
  ],
}
