import type { Block } from 'payload'

/**
 * LocationsBlock
 *
 * Zeigt Firmenstandorte mit Karte, Adresse, Öffnungszeiten und Kontaktdaten.
 * Unterstützt verschiedene Layouts und Kartenanbieter.
 */
export const LocationsBlock: Block = {
  slug: 'locations-block',
  labels: {
    singular: 'Standorte',
    plural: 'Standorte',
  },
  imageURL: '/assets/blocks/locations.png',
  fields: [
    {
      name: 'title',
      type: 'text',
      label: 'Überschrift',
      localized: true,
      defaultValue: 'Unsere Standorte',
    },
    {
      name: 'subtitle',
      type: 'textarea',
      label: 'Untertitel',
      localized: true,
    },
    // Datenquelle
    {
      name: 'source',
      type: 'select',
      defaultValue: 'all',
      label: 'Standorte',
      options: [
        { label: 'Alle aktiven Standorte', value: 'all' },
        { label: 'Nur Hauptstandort', value: 'main' },
        { label: 'Nach Typ', value: 'type' },
        { label: 'Manuell auswählen', value: 'manual' },
      ],
    },
    {
      name: 'locationType',
      type: 'select',
      label: 'Standort-Typ',
      options: [
        { label: 'Hauptsitz', value: 'headquarters' },
        { label: 'Büro', value: 'office' },
        { label: 'Filiale', value: 'branch' },
        { label: 'Lager', value: 'warehouse' },
        { label: 'Showroom', value: 'showroom' },
        { label: 'Studio', value: 'studio' },
        { label: 'Praxis', value: 'practice' },
        { label: 'Werkstatt', value: 'workshop' },
      ],
      admin: {
        condition: (_, siblingData) => siblingData?.source === 'type',
      },
    },
    {
      name: 'selectedLocations',
      type: 'relationship',
      relationTo: 'locations',
      hasMany: true,
      label: 'Standorte auswählen',
      admin: {
        condition: (_, siblingData) => siblingData?.source === 'manual',
      },
    },
    // Layout
    {
      name: 'layout',
      type: 'select',
      defaultValue: 'map-list',
      label: 'Layout',
      options: [
        { label: 'Karte + Liste', value: 'map-list' },
        { label: 'Nur Karte', value: 'map-only' },
        { label: 'Nur Liste', value: 'list-only' },
        { label: 'Karten-Grid', value: 'cards' },
        { label: 'Akkordeon', value: 'accordion' },
        { label: 'Tabs', value: 'tabs' },
      ],
    },
    {
      name: 'mapPosition',
      type: 'select',
      defaultValue: 'left',
      label: 'Karten-Position',
      options: [
        { label: 'Links', value: 'left' },
        { label: 'Rechts', value: 'right' },
        { label: 'Oben', value: 'top' },
        { label: 'Unten', value: 'bottom' },
      ],
      admin: {
        condition: (_, siblingData) => siblingData?.layout === 'map-list',
      },
    },
    {
      name: 'columns',
      type: 'select',
      defaultValue: '2',
      label: 'Spalten',
      options: [
        { label: '1 Spalte', value: '1' },
        { label: '2 Spalten', value: '2' },
        { label: '3 Spalten', value: '3' },
      ],
      admin: {
        condition: (_, siblingData) => siblingData?.layout === 'cards',
      },
    },
    // Karten-Einstellungen
    {
      name: 'map',
      type: 'group',
      label: 'Karten-Einstellungen',
      admin: {
        condition: (_, siblingData) =>
          siblingData?.layout === 'map-list' || siblingData?.layout === 'map-only',
      },
      fields: [
        {
          name: 'provider',
          type: 'select',
          defaultValue: 'osm',
          label: 'Kartenanbieter',
          options: [
            { label: 'OpenStreetMap', value: 'osm' },
            { label: 'Google Maps', value: 'google' },
            { label: 'Mapbox', value: 'mapbox' },
          ],
        },
        {
          name: 'style',
          type: 'select',
          defaultValue: 'default',
          label: 'Kartenstil',
          options: [
            { label: 'Standard', value: 'default' },
            { label: 'Hell', value: 'light' },
            { label: 'Dunkel', value: 'dark' },
            { label: 'Satellite', value: 'satellite' },
          ],
        },
        {
          name: 'height',
          type: 'select',
          defaultValue: '400',
          label: 'Höhe',
          options: [
            { label: 'Klein (300px)', value: '300' },
            { label: 'Mittel (400px)', value: '400' },
            { label: 'Groß (500px)', value: '500' },
            { label: 'Sehr groß (600px)', value: '600' },
          ],
        },
        {
          name: 'defaultZoom',
          type: 'number',
          defaultValue: 12,
          min: 1,
          max: 20,
          label: 'Standard-Zoom',
        },
        {
          name: 'fitBounds',
          type: 'checkbox',
          defaultValue: true,
          label: 'Alle Marker zeigen',
          admin: {
            description: 'Karte automatisch anpassen, um alle Standorte zu zeigen',
          },
        },
        {
          name: 'markerStyle',
          type: 'select',
          defaultValue: 'pin',
          label: 'Marker-Stil',
          options: [
            { label: 'Pin', value: 'pin' },
            { label: 'Punkt', value: 'dot' },
            { label: 'Icon', value: 'icon' },
            { label: 'Custom', value: 'custom' },
          ],
        },
        {
          name: 'markerColor',
          type: 'text',
          label: 'Marker-Farbe',
          defaultValue: '#e11d48',
          admin: {
            description: 'Hex-Farbe (z.B. #e11d48)',
          },
        },
        {
          name: 'clustering',
          type: 'checkbox',
          defaultValue: true,
          label: 'Marker clustern',
          admin: {
            description: 'Nahe Marker zu Gruppen zusammenfassen',
          },
        },
        {
          name: 'controls',
          type: 'group',
          label: 'Steuerung',
          fields: [
            {
              name: 'zoom',
              type: 'checkbox',
              defaultValue: true,
              label: 'Zoom-Buttons',
            },
            {
              name: 'fullscreen',
              type: 'checkbox',
              defaultValue: true,
              label: 'Vollbild-Button',
            },
            {
              name: 'scrollZoom',
              type: 'checkbox',
              defaultValue: false,
              label: 'Scroll-Zoom',
            },
            {
              name: 'dragging',
              type: 'checkbox',
              defaultValue: true,
              label: 'Verschiebbar',
            },
          ],
        },
      ],
    },
    // Anzuzeigende Informationen
    {
      name: 'show',
      type: 'group',
      label: 'Anzeigen',
      fields: [
        {
          name: 'image',
          type: 'checkbox',
          defaultValue: true,
          label: 'Bild',
        },
        {
          name: 'type',
          type: 'checkbox',
          defaultValue: false,
          label: 'Standort-Typ',
        },
        {
          name: 'address',
          type: 'checkbox',
          defaultValue: true,
          label: 'Adresse',
        },
        {
          name: 'phone',
          type: 'checkbox',
          defaultValue: true,
          label: 'Telefon',
        },
        {
          name: 'email',
          type: 'checkbox',
          defaultValue: true,
          label: 'E-Mail',
        },
        {
          name: 'hours',
          type: 'checkbox',
          defaultValue: true,
          label: 'Öffnungszeiten',
        },
        {
          name: 'directions',
          type: 'checkbox',
          defaultValue: false,
          label: 'Anfahrt',
        },
        {
          name: 'services',
          type: 'checkbox',
          defaultValue: false,
          label: 'Services',
        },
        {
          name: 'team',
          type: 'checkbox',
          defaultValue: false,
          label: 'Team-Mitglieder',
        },
      ],
    },
    // Aktionen
    {
      name: 'actions',
      type: 'group',
      label: 'Aktionen',
      fields: [
        {
          name: 'showDirectionsLink',
          type: 'checkbox',
          defaultValue: true,
          label: '"Route planen" Link',
        },
        {
          name: 'showCallButton',
          type: 'checkbox',
          defaultValue: true,
          label: 'Anruf-Button (mobil)',
        },
        {
          name: 'showEmailButton',
          type: 'checkbox',
          defaultValue: false,
          label: 'E-Mail-Button',
        },
        {
          name: 'showDetailLink',
          type: 'checkbox',
          defaultValue: false,
          label: 'Link zur Detail-Seite',
        },
        {
          name: 'detailBasePath',
          type: 'text',
          label: 'Detail-Basis-Pfad',
          defaultValue: '/standorte',
          admin: {
            condition: (_, siblingData) => siblingData?.showDetailLink,
          },
        },
      ],
    },
    // Styling
    {
      name: 'style',
      type: 'group',
      label: 'Darstellung',
      fields: [
        {
          name: 'bg',
          type: 'select',
          defaultValue: 'none',
          label: 'Hintergrund',
          options: [
            { label: 'Keiner', value: 'none' },
            { label: 'Hell', value: 'light' },
            { label: 'Dunkel', value: 'dark' },
          ],
        },
        {
          name: 'cardStyle',
          type: 'select',
          defaultValue: 'bordered',
          label: 'Karten-Stil',
          options: [
            { label: 'Einfach', value: 'simple' },
            { label: 'Mit Rahmen', value: 'bordered' },
            { label: 'Mit Schatten', value: 'shadow' },
            { label: 'Gefüllt', value: 'filled' },
          ],
        },
        {
          name: 'gap',
          type: 'select',
          defaultValue: '24',
          label: 'Abstand',
          options: [
            { label: 'Klein (16px)', value: '16' },
            { label: 'Normal (24px)', value: '24' },
            { label: 'Groß (32px)', value: '32' },
          ],
        },
      ],
    },
  ],
}
