# Decap CMS — configuración REAL de la PoC remota autorizada de Badavet.
# Panel desplegado en badavet-cms-poc.pages.dev. `base_url` sigue siendo
# un placeholder hasta que el Worker OAuth (badavet-cms-auth-poc) tenga
# una URL real asignada por Cloudflare — se completa en un paso
# posterior del mismo despliegue. Owner/repo/branch ya son reales.
#
# Hereda el mismo modelo estructurado sin widgets markdown/richtext ya
# probado en la PoC local (ver poc/decap/admin/config.yml y
# docs/cms/04-decap-local-poc.md) — el riesgo aceptado en
# docs/security/cms-contextual-risk-assessment.md sigue aplicando sin
# cambios: ningún campo de esta configuración usa esos widgets.

backend:
  name: github
  repo: davma1977/badavet-web
  # Nunca escribe directo a main/desktop-real-pages: rama editorial
  # dedicada, existente solo mientras dure la PoC remota.
  branch: cms-content-poc
  # base_url = origen del Worker OAuth (nunca badavet.com/cms.badavet.com
  # en esta fase — ver docs/cms/05-decap-remote-poc-preparation.md
  # §Arquitectura). auth_endpoint por defecto es 'auth', coincide con la
  # ruta GET /auth implementada en poc/decap/remote/auth-worker/.
  # PENDIENTE_URL_WORKER: se rellena tras el despliegue de mantenimiento
  # del Worker (docs/cms/05-decap-remote-poc-preparation.md §Runbook).
  base_url: https://PENDIENTE_URL_WORKER.workers.dev
  auth_endpoint: auth
  # Cloudflare Pages no emite de forma nativa un commit status que
  # contenga la palabra "deploy" (usa GitHub Checks, no Statuses) —
  # confirmado en esta fase, ver
  # docs/cms/05-decap-remote-poc-preparation.md §Deploy preview links.
  # Sin este puente, "Ver vista previa" en el panel no funcionará contra
  # el preview real de Cloudflare Pages.
  preview_context: 'Cloudflare Pages'

publish_mode: editorial_workflow

media_folder: 'media'
public_folder: '/media'

locale: 'es'
i18n:
  structure: multiple_folders
  locales: [es, ca, en]
  default_locale: es

collections:
  - name: 'config'
    label: 'Configuración global'
    files:
      - name: 'site'
        label: 'Datos globales del sitio'
        file: 'content/config/site.yml'
        i18n: true
        description: >-
          Solo nombre y eslogan de marca (grupo A). Contacto y horario
          (grupo B) quedan fuera de cualquier fase de esta PoC.
        fields:
          - {
              label: 'Nombre',
              name: 'name',
              widget: 'string',
              i18n: false,
              required: true,
              pattern: ['^.{3,60}$', 'Entre 3 y 60 caracteres'],
            }
          - {
              label: 'Eslogan',
              name: 'tagline',
              widget: 'text',
              i18n: true,
              required: true,
              pattern: ['^.{10,160}$', 'Entre 10 y 160 caracteres'],
            }

  - name: 'services'
    label: 'Servicios'
    folder: 'content/services'
    create: true
    i18n: true
    extension: 'yml'
    format: 'yaml'
    slug: '{{fields.internalKey}}'
    fields:
      - {
          label: 'Clave interna (estable, no debe cambiar tras publicar)',
          name: 'internalKey',
          widget: 'string',
          i18n: duplicate,
          required: true,
          pattern: ['^[a-z0-9-]+$', 'minúsculas, números y guiones, sin espacios'],
        }
      - {
          label: 'Slug (URL) de este idioma',
          name: 'slug',
          widget: 'string',
          i18n: true,
          required: true,
          pattern: ['^[a-z0-9-]+$', 'minúsculas, números y guiones, sin espacios ni acentos'],
        }
      - {
          label: 'Título',
          name: 'title',
          widget: 'string',
          i18n: true,
          required: true,
          pattern: ['^.{3,60}$', 'Entre 3 y 60 caracteres'],
        }
      - {
          label: 'Resumen',
          name: 'summary',
          widget: 'text',
          i18n: true,
          required: true,
          pattern: ['^.{20,220}$', 'Entre 20 y 220 caracteres'],
        }

  - name: 'team'
    label: 'Equipo'
    folder: 'content/team'
    create: true
    i18n: true
    extension: 'yml'
    format: 'yaml'
    slug: '{{fields.internalKey}}'
    fields:
      - {
          label: 'Clave interna',
          name: 'internalKey',
          widget: 'string',
          i18n: duplicate,
          required: true,
          pattern: ['^[a-z0-9-]+$', 'minúsculas, números y guiones'],
        }
      - { label: 'Nombre', name: 'name', widget: 'string', i18n: duplicate, required: true }
      - {
          label: 'Cargo',
          name: 'role',
          widget: 'string',
          i18n: true,
          required: true,
          pattern: ['^.{3,60}$', 'Entre 3 y 60 caracteres'],
        }
      - label: 'Historial / formación (máximo 15 puntos)'
        name: 'credentials'
        widget: 'list'
        i18n: true
        min: 1
        max: 15
        field:
          {
            label: 'Punto del historial',
            name: 'item',
            widget: 'text',
            pattern: ['^.{5,300}$', 'Entre 5 y 300 caracteres'],
          }

  - name: 'facilities'
    label: 'Instalaciones'
    folder: 'content/facilities'
    create: true
    i18n: true
    extension: 'yml'
    format: 'yaml'
    slug: '{{fields.internalKey}}'
    fields:
      - {
          label: 'Clave interna',
          name: 'internalKey',
          widget: 'string',
          i18n: duplicate,
          required: true,
          pattern: ['^[a-z0-9-]+$', 'minúsculas, números y guiones'],
        }
      - { label: 'Nombre', name: 'name', widget: 'string', i18n: true, required: true }
      - {
          label: 'Beneficio (una frase)',
          name: 'benefit',
          widget: 'text',
          i18n: true,
          required: true,
          pattern: ['^.{10,200}$', 'Entre 10 y 200 caracteres'],
        }

  - name: 'articles'
    label: 'Artículos y consejos'
    folder: 'content/articles'
    create: true
    i18n: true
    extension: 'yml'
    format: 'yaml'
    slug: '{{fields.internalKey}}'
    fields:
      - {
          label: 'Clave interna',
          name: 'internalKey',
          widget: 'string',
          i18n: duplicate,
          required: true,
          pattern: ['^[a-z0-9-]+$', 'minúsculas, números y guiones'],
        }
      - {
          label: 'Título (H1)',
          name: 'title',
          widget: 'string',
          i18n: true,
          required: true,
          pattern: ['^.{10,90}$', 'Entre 10 y 90 caracteres'],
        }
      - {
          label: 'Introducción',
          name: 'intro',
          widget: 'text',
          i18n: true,
          required: true,
          pattern: ['^.{20,500}$', 'Entre 20 y 500 caracteres'],
        }
      - label: 'Secciones (bloques estructurados, sin Markdown ni HTML — máximo 6)'
        name: 'sections'
        widget: 'list'
        i18n: true
        min: 1
        max: 6
        fields:
          - {
              label: 'Encabezado',
              name: 'heading',
              widget: 'string',
              required: true,
              pattern: ['^.{3,80}$', 'Entre 3 y 80 caracteres'],
            }
          - label: 'Párrafos (texto plano, máximo 4 por sección)'
            name: 'paragraphs'
            widget: 'list'
            min: 1
            max: 4
            field:
              {
                label: 'Párrafo',
                name: 'paragraph',
                widget: 'text',
                pattern: ['^.{1,800}$', 'Máximo 800 caracteres por párrafo'],
              }
      - label: 'CTA (llamada a la acción, solo enlaces internos)'
        name: 'cta'
        widget: 'object'
        i18n: true
        required: false
        fields:
          - {
              label: 'Etiqueta',
              name: 'label',
              widget: 'string',
              required: true,
              pattern: ['^.{2,40}$', 'Entre 2 y 40 caracteres'],
            }
          - label: 'Enlace (ruta interna relativa, nunca una URL externa u opaca)'
            name: 'href'
            widget: 'string'
            required: true
            pattern:
              [
                '^/[a-z0-9-]+(/[a-z0-9-]+)*/?$',
                'Debe ser una ruta interna relativa, p. ej. /es/solicitar-cita/',
              ]
