import type { CollectionConfig } from 'payload'

/**
 * Certifications Collection
 *
 * Zertifizierungen, Akkreditierungen und Qualitätssiegel (C2S)
 * Für Pflegeeinrichtungen und Gesundheitsdienstleister.
 */
export const Certifications: CollectionConfig = {
  slug: 'certifications',
  labels: {
    singular: 'Zertifizierung',
    plural: 'Zertifizierungen',
  },
  admin: {
    group: 'Qualität',
    useAsTitle: 'name',
    defaultColumns: ['name', 'issuer', 'type', 'validUntil', 'status'],
    description: 'Zertifizierungen, Akkreditierungen und Qualitätssiegel',
  },
  access: {
    read: () => true,
    create: ({ req: { user } }) => Boolean(user),
    update: ({ req: { user } }) => Boolean(user),
    delete: ({ req: { user } }) => Boolean(user?.isSuperAdmin),
  },
  fields: [
    // Grundinformationen
    {
      name: 'name',
      type: 'text',
      required: true,
      label: 'Name der Zertifizierung',
      localized: true,
    },
    {
      name: 'slug',
      type: 'text',
      required: true,
      unique: true,
      label: 'Slug',
      admin: {
        description: 'URL-freundlicher Name',
      },
    },
    {
      name: 'description',
      type: 'richText',
      label: 'Beschreibung',
      localized: true,
    },
    {
      name: 'shortDescription',
      type: 'textarea',
      label: 'Kurzbeschreibung',
      localized: true,
      admin: {
        description: 'Für Übersichten und Meta-Beschreibungen',
      },
    },
    // Zertifizierungs-Typ
    {
      name: 'type',
      type: 'select',
      required: true,
      label: 'Typ',
      options: [
        { label: 'ISO-Zertifizierung', value: 'iso' },
        { label: 'DIN-Norm', value: 'din' },
        { label: 'Akkreditierung', value: 'accreditation' },
        { label: 'Qualitätssiegel', value: 'seal' },
        { label: 'Mitgliedschaft', value: 'membership' },
        { label: 'Auszeichnung', value: 'award' },
        { label: 'Lizenz', value: 'license' },
        { label: 'Genehmigung', value: 'approval' },
        { label: 'Sonstiges', value: 'other' },
      ],
    },
    // Branchen-Kategorien (speziell für Pflege/Gesundheit)
    {
      name: 'category',
      type: 'select',
      label: 'Branchenkategorie',
      options: [
        { label: 'Qualitätsmanagement', value: 'quality' },
        { label: 'Pflege', value: 'care' },
        { label: 'Medizin', value: 'medical' },
        { label: 'Hygiene', value: 'hygiene' },
        { label: 'Arbeitsschutz', value: 'safety' },
        { label: 'Datenschutz', value: 'privacy' },
        { label: 'Umwelt', value: 'environment' },
        { label: 'Personal', value: 'hr' },
        { label: 'IT-Sicherheit', value: 'it-security' },
        { label: 'Barrierefreiheit', value: 'accessibility' },
        { label: 'Sonstiges', value: 'other' },
      ],
    },
    // Aussteller
    {
      name: 'issuer',
      type: 'group',
      label: 'Ausstellende Organisation',
      fields: [
        {
          name: 'name',
          type: 'text',
          required: true,
          label: 'Name',
        },
        {
          name: 'logo',
          type: 'upload',
          relationTo: 'media',
          label: 'Logo',
        },
        {
          name: 'website',
          type: 'text',
          label: 'Website',
        },
        {
          name: 'country',
          type: 'select',
          label: 'Land',
          options: [
            { label: 'Deutschland', value: 'DE' },
            { label: 'Österreich', value: 'AT' },
            { label: 'Schweiz', value: 'CH' },
            { label: 'EU', value: 'EU' },
            { label: 'International', value: 'INT' },
          ],
        },
      ],
    },
    // Zertifikat-Details
    {
      name: 'certNumber',
      type: 'text',
      label: 'Zertifikatsnummer',
    },
    {
      type: 'row',
      fields: [
        {
          name: 'issuedDate',
          type: 'date',
          label: 'Ausstellungsdatum',
          admin: {
            width: '50%',
            date: {
              pickerAppearance: 'dayOnly',
              displayFormat: 'dd.MM.yyyy',
            },
          },
        },
        {
          name: 'validUntil',
          type: 'date',
          label: 'Gültig bis',
          admin: {
            width: '50%',
            date: {
              pickerAppearance: 'dayOnly',
              displayFormat: 'dd.MM.yyyy',
            },
          },
        },
      ],
    },
    {
      name: 'renewalCycle',
      type: 'select',
      label: 'Erneuerungszyklus',
      options: [
        { label: 'Jährlich', value: 'yearly' },
        { label: 'Alle 2 Jahre', value: '2years' },
        { label: 'Alle 3 Jahre', value: '3years' },
        { label: 'Alle 5 Jahre', value: '5years' },
        { label: 'Unbefristet', value: 'unlimited' },
      ],
    },
    // Medien
    {
      name: 'logo',
      type: 'upload',
      relationTo: 'media',
      label: 'Zertifikats-Logo/Siegel',
    },
    {
      name: 'certificate',
      type: 'upload',
      relationTo: 'media',
      label: 'Zertifikat (PDF)',
      admin: {
        description: 'Das offizielle Zertifikatsdokument',
      },
    },
    {
      name: 'gallery',
      type: 'array',
      label: 'Weitere Dokumente',
      fields: [
        {
          name: 'document',
          type: 'upload',
          relationTo: 'media',
          label: 'Dokument',
        },
        {
          name: 'title',
          type: 'text',
          label: 'Titel',
        },
      ],
    },
    // Geltungsbereich
    {
      name: 'scope',
      type: 'group',
      label: 'Geltungsbereich',
      fields: [
        {
          name: 'description',
          type: 'textarea',
          label: 'Beschreibung des Geltungsbereichs',
          localized: true,
        },
        {
          name: 'locations',
          type: 'relationship',
          relationTo: 'locations',
          hasMany: true,
          label: 'Standorte',
          admin: {
            description: 'Für welche Standorte gilt die Zertifizierung?',
          },
        },
        {
          name: 'services',
          type: 'relationship',
          relationTo: 'services',
          hasMany: true,
          label: 'Leistungen',
          admin: {
            description: 'Für welche Leistungen gilt die Zertifizierung?',
          },
        },
      ],
    },
    // Anforderungen & Standards
    {
      name: 'requirements',
      type: 'array',
      label: 'Erfüllte Anforderungen',
      fields: [
        {
          name: 'requirement',
          type: 'text',
          required: true,
          label: 'Anforderung',
          localized: true,
        },
        {
          name: 'description',
          type: 'textarea',
          label: 'Erläuterung',
          localized: true,
        },
      ],
    },
    // Vorteile für Kunden
    {
      name: 'benefits',
      type: 'array',
      label: 'Vorteile / Was bedeutet das für Sie?',
      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: 'Schild', value: 'shield' },
            { label: 'Herz', value: 'heart' },
            { label: 'Schloss', value: 'lock' },
            { label: 'Lupe', value: 'search' },
            { label: 'Uhr', value: 'clock' },
            { label: 'Dokument', value: 'document' },
          ],
        },
      ],
    },
    // Audit-Informationen
    {
      name: 'audits',
      type: 'array',
      label: 'Audits / Prüfungen',
      admin: {
        description: 'Historie der durchgeführten Audits',
      },
      fields: [
        {
          name: 'date',
          type: 'date',
          required: true,
          label: 'Datum',
          admin: {
            date: {
              pickerAppearance: 'dayOnly',
              displayFormat: 'dd.MM.yyyy',
            },
          },
        },
        {
          name: 'type',
          type: 'select',
          label: 'Art',
          options: [
            { label: 'Erst-Zertifizierung', value: 'initial' },
            { label: 'Überwachungsaudit', value: 'surveillance' },
            { label: 'Re-Zertifizierung', value: 'recertification' },
            { label: 'Sonderaudit', value: 'special' },
          ],
        },
        {
          name: 'result',
          type: 'select',
          label: 'Ergebnis',
          options: [
            { label: 'Bestanden', value: 'passed' },
            { label: 'Mit Auflagen bestanden', value: 'conditional' },
            { label: 'Nicht bestanden', value: 'failed' },
          ],
        },
        {
          name: 'notes',
          type: 'textarea',
          label: 'Anmerkungen',
        },
      ],
    },
    // Status
    {
      name: 'status',
      type: 'select',
      required: true,
      defaultValue: 'active',
      label: 'Status',
      options: [
        { label: 'Aktiv', value: 'active' },
        { label: 'In Bearbeitung', value: 'pending' },
        { label: 'Erneuerung fällig', value: 'renewal' },
        { label: 'Ausgesetzt', value: 'suspended' },
        { label: 'Abgelaufen', value: 'expired' },
        { label: 'Zurückgezogen', value: 'withdrawn' },
      ],
      admin: {
        position: 'sidebar',
      },
    },
    // Sichtbarkeit
    {
      name: 'visibility',
      type: 'select',
      defaultValue: 'public',
      label: 'Sichtbarkeit',
      options: [
        { label: 'Öffentlich', value: 'public' },
        { label: 'Nur auf Anfrage', value: 'request' },
        { label: 'Intern', value: 'internal' },
      ],
      admin: {
        position: 'sidebar',
      },
    },
    // Priorität für Anzeige
    {
      name: 'priority',
      type: 'number',
      defaultValue: 0,
      label: 'Priorität',
      admin: {
        position: 'sidebar',
        description: 'Höhere Zahl = höhere Priorität in der Anzeige',
      },
    },
    // Auf Startseite anzeigen
    {
      name: 'showOnHomepage',
      type: 'checkbox',
      defaultValue: false,
      label: 'Auf Startseite anzeigen',
      admin: {
        position: 'sidebar',
      },
    },
    // SEO
    {
      name: 'seo',
      type: 'group',
      label: 'SEO',
      fields: [
        {
          name: 'metaTitle',
          type: 'text',
          label: 'Meta-Titel',
          localized: true,
        },
        {
          name: 'metaDescription',
          type: 'textarea',
          label: 'Meta-Beschreibung',
          localized: true,
        },
      ],
    },
  ],
  timestamps: true,
  hooks: {
    beforeChange: [
      ({ data }) => {
        // Auto-generate slug if not provided
        if (data && !data.slug && data.name) {
          data.slug = data.name
            .toLowerCase()
            .replace(/[äöüß]/g, (char: string) => {
              const map: Record<string, string> = { ä: 'ae', ö: 'oe', ü: 'ue', ß: 'ss' }
              return map[char] || char
            })
            .replace(/[^a-z0-9]+/g, '-')
            .replace(/(^-|-$)/g, '')
        }
        return data
      },
    ],
  },
}
