import type { Block } from 'payload'

/**
 * VideoBlock
 *
 * Erweiterter Video-Block mit Unterstützung für:
 * - YouTube/Vimeo Embeds
 * - Video-Uploads
 * - Video-Bibliothek (Videos Collection)
 * - Externe Video-URLs
 */
export const VideoBlock: Block = {
  slug: 'video-block',
  labels: {
    singular: 'Video',
    plural: 'Videos',
  },
  fields: [
    // === QUELLE ===
    {
      name: 'sourceType',
      type: 'select',
      required: true,
      defaultValue: 'embed',
      label: 'Video-Quelle',
      options: [
        { label: 'YouTube/Vimeo URL', value: 'embed' },
        { label: 'Video hochladen', value: 'upload' },
        { label: 'Aus Video-Bibliothek', value: 'library' },
        { label: 'Externe URL', value: 'external' },
      ],
      admin: {
        description: 'Woher soll das Video eingebunden werden?',
      },
    },

    // Video aus Bibliothek
    {
      name: 'videoFromLibrary',
      type: 'relationship',
      relationTo: 'videos',
      label: 'Video auswählen',
      admin: {
        description: 'Video aus der Video-Bibliothek auswählen',
        condition: (_, siblingData) => siblingData?.sourceType === 'library',
      },
    },

    // YouTube/Vimeo oder externe URL
    {
      name: 'videoUrl',
      type: 'text',
      label: 'Video-URL',
      admin: {
        description: 'YouTube, Vimeo oder externe Video-URL',
        condition: (_, siblingData) =>
          siblingData?.sourceType === 'embed' || siblingData?.sourceType === 'external',
      },
    },

    // Hochgeladenes Video
    {
      name: 'videoFile',
      type: 'upload',
      relationTo: 'media',
      label: 'Video-Datei',
      admin: {
        description: 'MP4, WebM oder andere Video-Dateien hochladen',
        condition: (_, siblingData) => siblingData?.sourceType === 'upload',
      },
    },

    // === DARSTELLUNG ===
    {
      name: 'thumbnail',
      type: 'upload',
      relationTo: 'media',
      label: 'Vorschaubild',
      admin: {
        description: 'Eigenes Thumbnail (optional, bei YouTube wird automatisch eines verwendet)',
      },
    },
    {
      name: 'caption',
      type: 'text',
      label: 'Beschriftung',
      localized: true,
      admin: {
        description: 'Bildunterschrift unter dem Video',
      },
    },
    {
      name: 'aspectRatio',
      type: 'select',
      defaultValue: '16:9',
      label: 'Seitenverhältnis',
      options: [
        { label: '16:9 (Standard)', value: '16:9' },
        { label: '4:3', value: '4:3' },
        { label: '1:1 (Quadrat)', value: '1:1' },
        { label: '9:16 (Vertikal)', value: '9:16' },
        { label: '21:9 (Ultrawide)', value: '21:9' },
      ],
    },
    {
      name: 'size',
      type: 'select',
      defaultValue: 'full',
      label: 'Größe',
      options: [
        { label: 'Volle Breite', value: 'full' },
        { label: 'Groß (75%)', value: 'large' },
        { label: 'Mittel (50%)', value: 'medium' },
        { label: 'Klein (33%)', value: 'small' },
      ],
      admin: {
        description: 'Breite des Video-Containers',
      },
    },
    {
      name: 'alignment',
      type: 'select',
      defaultValue: 'center',
      label: 'Ausrichtung',
      options: [
        { label: 'Links', value: 'left' },
        { label: 'Zentriert', value: 'center' },
        { label: 'Rechts', value: 'right' },
      ],
      admin: {
        condition: (_, siblingData) => siblingData?.size !== 'full',
      },
    },

    // === WIEDERGABE-OPTIONEN ===
    {
      name: 'playback',
      type: 'group',
      label: 'Wiedergabe',
      fields: [
        {
          name: 'autoplay',
          type: 'checkbox',
          defaultValue: false,
          label: 'Autoplay',
          admin: {
            description: 'Video automatisch starten (erfordert meist Mute)',
          },
        },
        {
          name: 'muted',
          type: 'checkbox',
          defaultValue: false,
          label: 'Stummgeschaltet',
          admin: {
            description: 'Video stumm abspielen',
          },
        },
        {
          name: 'loop',
          type: 'checkbox',
          defaultValue: false,
          label: 'Wiederholen',
          admin: {
            description: 'Video in Endlosschleife abspielen',
          },
        },
        {
          name: 'controls',
          type: 'checkbox',
          defaultValue: true,
          label: 'Steuerung anzeigen',
          admin: {
            description: 'Video-Controls anzeigen',
          },
        },
        {
          name: 'playsinline',
          type: 'checkbox',
          defaultValue: true,
          label: 'Inline abspielen',
          admin: {
            description: 'Auf Mobile inline statt Vollbild abspielen',
          },
        },
        {
          name: 'startTime',
          type: 'number',
          min: 0,
          label: 'Startzeit (Sekunden)',
          admin: {
            description: 'Video ab dieser Sekunde starten',
          },
        },
      ],
    },

    // === EMBED-OPTIONEN (nur für YouTube/Vimeo) ===
    {
      name: 'embedOptions',
      type: 'group',
      label: 'Embed-Optionen',
      admin: {
        condition: (_, siblingData) => siblingData?.sourceType === 'embed',
      },
      fields: [
        {
          name: 'showRelated',
          type: 'checkbox',
          defaultValue: false,
          label: 'Ähnliche Videos anzeigen',
          admin: {
            description: 'Am Ende ähnliche Videos von YouTube/Vimeo anzeigen',
          },
        },
        {
          name: 'privacyMode',
          type: 'checkbox',
          defaultValue: true,
          label: 'Datenschutz-Modus',
          admin: {
            description: 'YouTube-nocookie.com verwenden (DSGVO-konformer)',
          },
        },
      ],
    },

    // === STYLING ===
    {
      name: 'style',
      type: 'group',
      label: 'Styling',
      fields: [
        {
          name: 'rounded',
          type: 'select',
          defaultValue: 'none',
          label: 'Ecken abrunden',
          options: [
            { label: 'Keine', value: 'none' },
            { label: 'Leicht (sm)', value: 'sm' },
            { label: 'Mittel (md)', value: 'md' },
            { label: 'Stark (lg)', value: 'lg' },
            { label: 'Extra (xl)', value: 'xl' },
          ],
        },
        {
          name: 'shadow',
          type: 'select',
          defaultValue: 'none',
          label: 'Schatten',
          options: [
            { label: 'Kein', value: 'none' },
            { label: 'Leicht', value: 'sm' },
            { label: 'Mittel', value: 'md' },
            { label: 'Stark', value: 'lg' },
            { label: 'Extra', value: 'xl' },
          ],
        },
        {
          name: 'border',
          type: 'checkbox',
          defaultValue: false,
          label: 'Rahmen anzeigen',
        },
      ],
    },
  ],
}
