import type { CollectionConfig } from 'payload'

/**
 * Authors Collection
 *
 * Blog-Autoren mit Bio, Bild und Social Links.
 * Kann optional mit Team-Mitgliedern verknüpft werden.
 */
export const Authors: CollectionConfig = {
  slug: 'authors',
  labels: {
    singular: 'Autor',
    plural: 'Autoren',
  },
  admin: {
    useAsTitle: 'name',
    group: 'Content',
    defaultColumns: ['name', 'slug', 'postCount', 'isActive', 'updatedAt'],
    description: 'Blog-Autoren und Gastautoren',
  },
  access: {
    read: () => true,
    create: ({ req }) => !!req.user,
    update: ({ req }) => !!req.user,
    delete: ({ req }) => !!req.user,
  },
  fields: [
    // Basis-Informationen
    {
      name: 'name',
      type: 'text',
      required: true,
      label: 'Name',
      admin: {
        description: 'Anzeigename des Autors',
      },
    },
    {
      name: 'slug',
      type: 'text',
      required: true,
      unique: true,
      label: 'Slug',
      admin: {
        description: 'URL-freundlicher Identifier (z.B. "max-mustermann")',
      },
    },
    {
      name: 'avatar',
      type: 'upload',
      relationTo: 'media',
      label: 'Profilbild',
      admin: {
        description: 'Avatar/Profilbild (empfohlen: quadratisch, min. 200x200px)',
      },
    },
    {
      name: 'bio',
      type: 'richText',
      label: 'Biografie',
      localized: true,
      admin: {
        description: 'Ausführliche Biografie für Autorenseite',
      },
    },
    {
      name: 'bioShort',
      type: 'textarea',
      label: 'Kurzbiografie',
      localized: true,
      admin: {
        description: 'Ein bis zwei Sätze für Anzeige unter Artikeln',
      },
    },
    {
      name: 'title',
      type: 'text',
      label: 'Titel/Position',
      localized: true,
      admin: {
        description: 'z.B. "Senior Editor", "Gastautor", "Chefredakteur"',
      },
    },
    // Kontakt & Social
    {
      name: 'email',
      type: 'email',
      label: 'E-Mail',
      admin: {
        description: 'Öffentliche Kontakt-E-Mail (optional)',
      },
    },
    {
      name: 'website',
      type: 'text',
      label: 'Website',
      admin: {
        description: 'Persönliche Website oder Blog',
      },
    },
    {
      name: 'social',
      type: 'group',
      label: 'Social Media',
      fields: [
        {
          name: 'twitter',
          type: 'text',
          label: 'Twitter/X',
          admin: {
            description: 'Twitter-Handle ohne @ (z.B. "maxmustermann")',
          },
        },
        {
          name: 'linkedin',
          type: 'text',
          label: 'LinkedIn',
          admin: {
            description: 'LinkedIn-Profil-URL oder Username',
          },
        },
        {
          name: 'github',
          type: 'text',
          label: 'GitHub',
          admin: {
            description: 'GitHub-Username',
          },
        },
        {
          name: 'instagram',
          type: 'text',
          label: 'Instagram',
          admin: {
            description: 'Instagram-Handle ohne @',
          },
        },
      ],
    },
    // Verknüpfungen
    {
      name: 'linkedTeam',
      type: 'relationship',
      relationTo: 'team',
      label: 'Team-Mitglied',
      admin: {
        position: 'sidebar',
        description: 'Optional: Verknüpfung mit Team-Eintrag',
      },
    },
    {
      name: 'linkedUser',
      type: 'relationship',
      relationTo: 'users',
      label: 'Benutzer',
      admin: {
        position: 'sidebar',
        description: 'Optional: Verknüpfung mit Login-User',
      },
    },
    // Status
    {
      name: 'isActive',
      type: 'checkbox',
      defaultValue: true,
      label: 'Aktiv',
      admin: {
        position: 'sidebar',
        description: 'Inaktive Autoren erscheinen nicht in Listen',
      },
    },
    {
      name: 'isGuest',
      type: 'checkbox',
      defaultValue: false,
      label: 'Gastautor',
      admin: {
        position: 'sidebar',
        description: 'Markierung für Gastautoren',
      },
    },
    {
      name: 'featured',
      type: 'checkbox',
      defaultValue: false,
      label: 'Hervorgehoben',
      admin: {
        position: 'sidebar',
        description: 'Für besondere Darstellung auf Autorenseite',
      },
    },
  ],
  hooks: {
    beforeChange: [
      ({ data }) => {
        // Auto-generate slug from name if not provided
        if (data && !data.slug && data.name) {
          data.slug = data.name
            .toLowerCase()
            .replace(/[äöüß]/g, (match: string) => {
              const map: Record<string, string> = { ä: 'ae', ö: 'oe', ü: 'ue', ß: 'ss' }
              return map[match] || match
            })
            .replace(/[^a-z0-9]+/g, '-')
            .replace(/^-|-$/g, '')
        }
        return data
      },
    ],
  },
}
