import type { Block } from 'payload'

/**
 * RelatedPostsBlock
 *
 * Zeigt verwandte Artikel an, basierend auf Kategorien, Tags
 * oder manueller Auswahl.
 */
export const RelatedPostsBlock: Block = {
  slug: 'related-posts-block',
  labels: {
    singular: 'Ähnliche Artikel',
    plural: 'Ähnliche Artikel',
  },
  imageURL: '/assets/blocks/related-posts.png',
  fields: [
    {
      name: 'title',
      type: 'text',
      label: 'Überschrift',
      localized: true,
      defaultValue: 'Das könnte Sie auch interessieren',
    },
    {
      name: 'source',
      type: 'select',
      defaultValue: 'auto',
      label: 'Artikel-Quelle',
      options: [
        { label: 'Automatisch (Kategorien/Tags)', value: 'auto' },
        { label: 'Manuell auswählen', value: 'manual' },
        { label: 'Nach Kategorie', value: 'category' },
        { label: 'Nach Tag', value: 'tag' },
        { label: 'Neueste Artikel', value: 'latest' },
        { label: 'Beliebteste Artikel', value: 'popular' },
        { label: 'Vom gleichen Autor', value: 'author' },
      ],
    },
    {
      name: 'posts',
      type: 'relationship',
      relationTo: 'posts',
      hasMany: true,
      label: 'Artikel',
      admin: {
        condition: (_, siblingData) => siblingData?.source === 'manual',
        description: 'Wählen Sie die anzuzeigenden Artikel',
      },
    },
    {
      name: 'category',
      type: 'relationship',
      relationTo: 'categories',
      label: 'Kategorie',
      admin: {
        condition: (_, siblingData) => siblingData?.source === 'category',
      },
    },
    {
      name: 'tag',
      type: 'relationship',
      relationTo: 'tags',
      label: 'Tag',
      admin: {
        condition: (_, siblingData) => siblingData?.source === 'tag',
      },
    },
    {
      name: 'limit',
      type: 'number',
      defaultValue: 3,
      min: 1,
      max: 12,
      label: 'Anzahl Artikel',
    },
    {
      name: 'excludeCurrent',
      type: 'checkbox',
      defaultValue: true,
      label: 'Aktuellen Artikel ausschließen',
      admin: {
        description: 'Den Artikel, auf dem dieser Block ist, nicht anzeigen',
      },
    },
    // Layout
    {
      name: 'layout',
      type: 'select',
      defaultValue: 'grid',
      label: 'Layout',
      options: [
        { label: 'Grid', value: 'grid' },
        { label: 'Liste', value: 'list' },
        { label: 'Slider', value: 'slider' },
        { label: 'Kompakt', value: 'compact' },
        { label: 'Cards', value: 'cards' },
      ],
    },
    {
      name: 'cols',
      type: 'select',
      defaultValue: '3',
      label: 'Spalten',
      options: [
        { label: '2 Spalten', value: '2' },
        { label: '3 Spalten', value: '3' },
        { label: '4 Spalten', value: '4' },
      ],
      admin: {
        condition: (_, siblingData) =>
          siblingData?.layout === 'grid' || siblingData?.layout === 'cards',
      },
    },
    // Anzuzeigende Elemente
    {
      name: 'show',
      type: 'group',
      label: 'Anzeigen',
      fields: [
        {
          name: 'image',
          type: 'checkbox',
          defaultValue: true,
          label: 'Beitragsbild',
        },
        {
          name: 'date',
          type: 'checkbox',
          defaultValue: true,
          label: 'Datum',
        },
        {
          name: 'author',
          type: 'checkbox',
          defaultValue: false,
          label: 'Autor',
        },
        {
          name: 'category',
          type: 'checkbox',
          defaultValue: true,
          label: 'Kategorie',
        },
        {
          name: 'excerpt',
          type: 'checkbox',
          defaultValue: true,
          label: 'Kurzfassung',
        },
        {
          name: 'readingTime',
          type: 'checkbox',
          defaultValue: false,
          label: 'Lesezeit',
        },
        {
          name: 'tags',
          type: 'checkbox',
          defaultValue: false,
          label: 'Tags',
        },
      ],
    },
    // Styling
    {
      name: 'style',
      type: 'group',
      label: 'Darstellung',
      fields: [
        {
          name: 'imgRatio',
          type: 'select',
          defaultValue: '16-9',
          label: 'Bild-Verhältnis',
          options: [
            { label: 'Quadratisch (1:1)', value: 'square' },
            { label: 'Querformat (4:3)', value: '4-3' },
            { label: 'Breit (16:9)', value: '16-9' },
            { label: 'Hochformat (3:4)', value: '3-4' },
          ],
        },
        {
          name: 'rounded',
          type: 'select',
          defaultValue: 'md',
          label: 'Ecken',
          options: [
            { label: 'Keine', value: 'none' },
            { label: 'Klein', value: 'sm' },
            { label: 'Mittel', value: 'md' },
            { label: 'Groß', value: 'lg' },
          ],
        },
        {
          name: 'shadow',
          type: 'checkbox',
          defaultValue: false,
          label: 'Schatten',
        },
        {
          name: 'hover',
          type: 'select',
          defaultValue: 'lift',
          label: 'Hover-Effekt',
          options: [
            { label: 'Keiner', value: 'none' },
            { label: 'Anheben', value: 'lift' },
            { label: 'Zoom', value: 'zoom' },
            { label: 'Overlay', value: 'overlay' },
          ],
        },
        {
          name: 'bg',
          type: 'select',
          defaultValue: 'none',
          label: 'Hintergrund',
          options: [
            { label: 'Keiner', value: 'none' },
            { label: 'Hell', value: 'light' },
            { label: 'Dunkel', value: 'dark' },
          ],
        },
        {
          name: 'gap',
          type: 'select',
          defaultValue: '24',
          label: 'Abstand',
          options: [
            { label: 'Klein (16px)', value: '16' },
            { label: 'Normal (24px)', value: '24' },
            { label: 'Groß (32px)', value: '32' },
          ],
        },
      ],
    },
    // CTA
    {
      name: 'showAllLink',
      type: 'checkbox',
      defaultValue: false,
      label: '"Alle anzeigen" Link',
    },
    {
      name: 'allLinkText',
      type: 'text',
      label: 'Link-Text',
      localized: true,
      defaultValue: 'Alle Artikel anzeigen',
      admin: {
        condition: (_, siblingData) => siblingData?.showAllLink,
      },
    },
    {
      name: 'allLinkUrl',
      type: 'text',
      label: 'Link-URL',
      admin: {
        condition: (_, siblingData) => siblingData?.showAllLink,
        description: 'z.B. /blog oder /news',
      },
    },
  ],
}
