import type { CollectionConfig } from 'payload'
import { authenticatedOnly, tenantScopedPublicRead } from '../lib/tenantAccess'

export const Portfolios: CollectionConfig = {
  slug: 'portfolios',
  admin: {
    useAsTitle: 'title',
    group: 'Portfolio',
    description: 'Portfolio-Galerien mit Fotografien',
    defaultColumns: ['title', 'category', 'isFeatured', 'status', 'publishedAt'],
  },
  access: {
    read: tenantScopedPublicRead,
    create: authenticatedOnly,
    update: authenticatedOnly,
    delete: authenticatedOnly,
  },
  fields: [
    // === HAUPTINFORMATIONEN ===
    {
      name: 'title',
      type: 'text',
      required: true,
      localized: true,
      label: 'Titel',
      admin: {
        description: 'Name der Galerie / des Projekts',
      },
    },
    {
      name: 'slug',
      type: 'text',
      required: true,
      unique: false, // Uniqueness per tenant/locale
      label: 'URL-Slug',
      admin: {
        description: 'URL-freundlicher Name (z.B. "hochzeit-maria-thomas")',
      },
    },
    {
      name: 'description',
      type: 'richText',
      localized: true,
      label: 'Beschreibung',
      admin: {
        description: 'Ausführliche Beschreibung des Projekts/Shootings',
      },
    },
    {
      name: 'excerpt',
      type: 'textarea',
      localized: true,
      maxLength: 300,
      label: 'Kurzfassung',
      admin: {
        description: 'Kurze Beschreibung für Übersichten und SEO (max. 300 Zeichen)',
      },
    },

    // === KATEGORISIERUNG ===
    {
      name: 'category',
      type: 'relationship',
      relationTo: 'portfolio-categories',
      required: true,
      label: 'Kategorie',
      admin: {
        description: 'Hauptkategorie dieser Galerie',
      },
    },
    {
      name: 'tags',
      type: 'text',
      hasMany: true,
      label: 'Tags',
      admin: {
        description: 'Zusätzliche Schlagwörter für Filterung (z.B. "outdoor", "studio", "schwarz-weiß")',
      },
    },

    // === BILDER ===
    {
      name: 'coverImage',
      type: 'upload',
      relationTo: 'media',
      required: true,
      label: 'Cover-Bild',
      admin: {
        description: 'Hauptbild für Übersichten und Vorschauen',
      },
    },
    {
      name: 'images',
      type: 'array',
      required: true,
      minRows: 1,
      label: 'Galerie-Bilder',
      admin: {
        description: 'Alle Bilder dieser Galerie',
      },
      fields: [
        {
          name: 'image',
          type: 'upload',
          relationTo: 'media',
          required: true,
          label: 'Bild',
        },
        {
          name: 'caption',
          type: 'text',
          localized: true,
          label: 'Bildunterschrift',
          admin: {
            description: 'Optionale Beschreibung für dieses Bild',
          },
        },
        {
          name: 'isHighlight',
          type: 'checkbox',
          defaultValue: false,
          label: 'Highlight',
          admin: {
            description: 'Als Highlight-Bild markieren',
          },
        },
      ],
    },

    // === PROJEKT-DETAILS ===
    {
      name: 'projectDetails',
      type: 'group',
      label: 'Projekt-Details',
      admin: {
        description: 'Zusätzliche Informationen zum Shooting',
      },
      fields: [
        {
          name: 'client',
          type: 'text',
          label: 'Kunde/Auftraggeber',
          admin: {
            description: 'Name des Kunden (optional, für Referenzen)',
          },
        },
        {
          name: 'location',
          type: 'text',
          localized: true,
          label: 'Ort',
          admin: {
            description: 'Wo wurde das Shooting durchgeführt?',
          },
        },
        {
          name: 'shootingDate',
          type: 'date',
          label: 'Shooting-Datum',
          admin: {
            date: {
              pickerAppearance: 'dayOnly',
            },
          },
        },
        {
          name: 'equipment',
          type: 'text',
          hasMany: true,
          label: 'Verwendete Ausrüstung',
          admin: {
            description: 'Kamera, Objektive etc. (optional)',
          },
        },
      ],
    },

    // === STATUS & VERÖFFENTLICHUNG ===
    {
      name: 'status',
      type: 'select',
      defaultValue: 'draft',
      required: true,
      options: [
        { label: 'Entwurf', value: 'draft' },
        { label: 'Veröffentlicht', value: 'published' },
        { label: 'Archiviert', value: 'archived' },
      ],
      admin: {
        position: 'sidebar',
        description: 'Veröffentlichungsstatus',
      },
    },
    {
      name: 'isFeatured',
      type: 'checkbox',
      defaultValue: false,
      label: 'Hervorgehoben',
      admin: {
        position: 'sidebar',
        description: 'Auf der Startseite anzeigen',
      },
    },
    {
      name: 'publishedAt',
      type: 'date',
      label: 'Veröffentlichungsdatum',
      admin: {
        position: 'sidebar',
        date: {
          pickerAppearance: 'dayAndTime',
        },
        description: 'Wann soll die Galerie veröffentlicht werden?',
      },
    },
    {
      name: 'order',
      type: 'number',
      defaultValue: 0,
      label: 'Reihenfolge',
      admin: {
        position: 'sidebar',
        description: 'Für manuelle Sortierung (niedrigere Zahlen zuerst)',
      },
    },

    // === SEO ===
    {
      name: 'seo',
      type: 'group',
      label: 'SEO',
      fields: [
        {
          name: 'metaTitle',
          type: 'text',
          label: 'Meta-Titel',
          localized: true,
          admin: {
            description: 'Überschreibt den Standardtitel für Suchmaschinen',
          },
        },
        {
          name: 'metaDescription',
          type: 'textarea',
          label: 'Meta-Beschreibung',
          maxLength: 160,
          localized: true,
          admin: {
            description: 'Beschreibung für Suchmaschinen (max. 160 Zeichen)',
          },
        },
        {
          name: 'ogImage',
          type: 'upload',
          relationTo: 'media',
          label: 'Social Media Bild',
          admin: {
            description: 'Bild für Social Media Shares (verwendet Cover-Bild wenn leer)',
          },
        },
      ],
    },
  ],
}
