import type { Block } from 'payload'

/**
 * Team Block
 *
 * Zeigt Team-Mitglieder aus der Team Collection.
 * Unterstützt verschiedene Layouts und Filteroptionen.
 */
export const TeamBlock: Block = {
  slug: 'team-block',
  labels: {
    singular: 'Team',
    plural: 'Team',
  },
  fields: [
    {
      name: 'title',
      type: 'text',
      defaultValue: 'Unser Team',
      label: 'Überschrift',
      localized: true,
    },
    {
      name: 'subtitle',
      type: 'text',
      label: 'Untertitel',
      localized: true,
    },
    {
      name: 'introduction',
      type: 'richText',
      label: 'Einleitungstext',
      localized: true,
      admin: {
        description: 'Optionaler Text vor der Team-Anzeige',
      },
    },
    // Auswahl-Modus
    {
      name: 'displayMode',
      type: 'select',
      defaultValue: 'all',
      label: 'Auswahl',
      options: [
        { label: 'Alle aktiven Mitglieder', value: 'all' },
        { label: 'Nur hervorgehobene', value: 'featured' },
        { label: 'Nach Abteilung', value: 'department' },
        { label: 'Handverlesene Auswahl', value: 'selected' },
      ],
    },
    {
      name: 'department',
      type: 'text',
      label: 'Abteilung filtern',
      admin: {
        condition: (data, siblingData) => siblingData?.displayMode === 'department',
        description: 'Zeigt nur Mitglieder dieser Abteilung',
      },
    },
    {
      name: 'selectedMembers',
      type: 'relationship',
      // eslint-disable-next-line @typescript-eslint/no-explicit-any
      relationTo: 'team' as any,
      hasMany: true,
      label: 'Team-Mitglieder auswählen',
      admin: {
        condition: (data, siblingData) => siblingData?.displayMode === 'selected',
      },
    },
    {
      name: 'limit',
      type: 'number',
      defaultValue: 12,
      min: 1,
      max: 50,
      label: 'Maximale Anzahl',
      admin: {
        condition: (data, siblingData) =>
          siblingData?.displayMode === 'all' || siblingData?.displayMode === 'department',
      },
    },
    // Layout
    {
      name: 'layout',
      type: 'select',
      defaultValue: 'grid',
      label: 'Layout',
      options: [
        { label: 'Grid (Karten)', value: 'grid' },
        { label: 'Liste', value: 'list' },
        { label: 'Slider/Karussell', value: 'slider' },
        { label: 'Kompakt (nur Foto + Name)', value: 'compact' },
        { label: 'Detailliert (mit Bio)', value: 'detailed' },
      ],
    },
    {
      name: 'columns',
      type: 'select',
      defaultValue: '3',
      label: 'Spalten',
      options: [
        { label: '2 Spalten', value: '2' },
        { label: '3 Spalten', value: '3' },
        { label: '4 Spalten', value: '4' },
      ],
      admin: {
        condition: (data, siblingData) =>
          siblingData?.layout === 'grid' || siblingData?.layout === 'compact',
      },
    },
    // Anzeigeoptionen
    {
      name: 'showRole',
      type: 'checkbox',
      defaultValue: true,
      label: 'Position/Rolle anzeigen',
    },
    {
      name: 'showDepartment',
      type: 'checkbox',
      defaultValue: false,
      label: 'Abteilung anzeigen',
    },
    {
      name: 'showBio',
      type: 'checkbox',
      defaultValue: true,
      label: 'Biografie anzeigen',
      admin: {
        condition: (data, siblingData) =>
          siblingData?.layout !== 'compact',
      },
    },
    {
      name: 'showContact',
      type: 'checkbox',
      defaultValue: false,
      label: 'Kontaktdaten anzeigen',
      admin: {
        description: 'Nur wenn beim Mitglied "Kontaktdaten öffentlich anzeigen" aktiviert ist',
      },
    },
    {
      name: 'showSocialLinks',
      type: 'checkbox',
      defaultValue: true,
      label: 'Social Media Links anzeigen',
    },
    {
      name: 'showQualifications',
      type: 'checkbox',
      defaultValue: false,
      label: 'Qualifikationen anzeigen',
      admin: {
        condition: (data, siblingData) =>
          siblingData?.layout === 'detailed' || siblingData?.layout === 'list',
      },
    },
    {
      name: 'showSpecializations',
      type: 'checkbox',
      defaultValue: false,
      label: 'Fachgebiete anzeigen',
    },
    {
      name: 'showLanguages',
      type: 'checkbox',
      defaultValue: false,
      label: 'Sprachkenntnisse anzeigen',
    },
    // Gruppierung
    {
      name: 'groupByDepartment',
      type: 'checkbox',
      defaultValue: false,
      label: 'Nach Abteilung gruppieren',
      admin: {
        condition: (data, siblingData) =>
          siblingData?.displayMode !== 'department' && siblingData?.layout !== 'slider',
      },
    },
    // Slider-Optionen
    {
      name: 'autoplay',
      type: 'checkbox',
      defaultValue: true,
      label: 'Automatisch wechseln',
      admin: {
        condition: (data, siblingData) => siblingData?.layout === 'slider',
      },
    },
    {
      name: 'autoplaySpeed',
      type: 'number',
      defaultValue: 5000,
      min: 2000,
      max: 15000,
      label: 'Wechselintervall (ms)',
      admin: {
        condition: (data, siblingData) =>
          siblingData?.layout === 'slider' && siblingData?.autoplay,
      },
    },
    // Detail-Ansicht
    {
      name: 'enableDetailView',
      type: 'checkbox',
      defaultValue: false,
      label: 'Detail-Ansicht aktivieren',
      admin: {
        description: 'Klick auf Mitglied öffnet Modal/Lightbox mit allen Details',
      },
    },
    // Styling
    {
      name: 'imageStyle',
      type: 'select',
      defaultValue: 'rounded',
      label: 'Foto-Stil',
      options: [
        { label: 'Rund', value: 'circle' },
        { label: 'Abgerundet', value: 'rounded' },
        { label: 'Eckig', value: 'square' },
      ],
    },
    {
      name: 'backgroundColor',
      type: 'select',
      defaultValue: 'white',
      label: 'Hintergrund',
      options: [
        { label: 'Weiß', value: 'white' },
        { label: 'Hell (Grau)', value: 'light' },
        { label: 'Dunkel', value: 'dark' },
        { label: 'Akzentfarbe', value: 'accent' },
      ],
    },
    // CTA
    {
      name: 'showCTA',
      type: 'checkbox',
      defaultValue: false,
      label: 'CTA-Button anzeigen',
    },
    {
      name: 'ctaText',
      type: 'text',
      defaultValue: 'Jetzt bewerben',
      label: 'CTA Text',
      localized: true,
      admin: {
        condition: (data, siblingData) => siblingData?.showCTA,
      },
    },
    {
      name: 'ctaLink',
      type: 'text',
      defaultValue: '/karriere',
      label: 'CTA Link',
      admin: {
        condition: (data, siblingData) => siblingData?.showCTA,
      },
    },
  ],
}
