# =============================================================================
# Stack DEV local __PROJECT_TITLE__ — démarrage rapide.
# -----------------------------------------------------------------------------
# WordPress = image BASE du framework (ghcr.io/wp-reactor/wordpress-base, qui
# bake le thème parent + plugin). Le thème ENFANT est bind-monté en live pour
# l'éditer sans rebuild. La webapp tourne dans le stack (service `webapp`,
# node:22-alpine) : sources bind-montées + HMR Vite par polling, port 3000.
#
# Prérequis : l'image base est PRIVÉE (GHCR) → s'authentifier une fois :
#   echo <PAT read:packages> | docker login ghcr.io -u <user> --password-stdin
#
# Démarrage :
#   cp .env.local.example .env  # ajuste si besoin
#   docker compose -f docker-compose.dev.yml up -d
#   docker compose -f docker-compose.dev.yml exec -u 33:33 wordpress sh /bootstrap.sh
# Webapp (HMR)              : http://localhost:3000
# WordPress (admin/GraphQL) : http://localhost:${WP_PORT}
#
# Alternative (HMR le plus rapide) : couper le service `webapp` et lancer
# `pnpm dev` sur l'hôte — même port 3000.
# =============================================================================
name: __PROJECT_NAME__-dev

services:
  db:
    image: mariadb:11
    environment:
      MARIADB_DATABASE: ${WORDPRESS_DB_NAME}
      MARIADB_USER: ${WORDPRESS_DB_USER}
      MARIADB_PASSWORD: ${WORDPRESS_DB_PASSWORD}
      MARIADB_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
    volumes:
      - db_data:/var/lib/mysql
    healthcheck:
      test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
      interval: 5s
      timeout: 5s
      retries: 20

  redis:
    image: redis:7-alpine

  wordpress:
    image: ghcr.io/wp-reactor/wordpress-base:latest
    # Image base multi-arch (linux/amd64 + linux/arm64, cf. release-wordpress-base.yml) :
    # Docker tire automatiquement la variante native de l'hôte (arm64 sur Apple
    # Silicon) → plus d'émulation x86.
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_started
    ports:
      - "${WP_PORT}:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: ${WORDPRESS_DB_NAME}
      WORDPRESS_DB_USER: ${WORDPRESS_DB_USER}
      WORDPRESS_DB_PASSWORD: ${WORDPRESS_DB_PASSWORD}
      # Lues par la config bakée (wp-reactor-config.php via auto_prepend_file).
      WP_HOME: ${WP_HOME}
      WP_SITEURL: ${WP_HOME}
      WP_ENVIRONMENT_TYPE: local
      WP_REDIS_HOST: redis
      FRONTEND_URL: ${FRONTEND_URL}
      WP_DEBUG: "true"
      GRAPHQL_DEBUG: "true"
      # Lues par bootstrap.sh (wp-cli est dans l'image base) :
      #   docker compose -f docker-compose.dev.yml exec -u 33:33 wordpress sh /bootstrap.sh
      WP_SITE_TITLE: ${WP_SITE_TITLE}
      WP_ADMIN_USER: ${WP_ADMIN_USER}
      WP_ADMIN_PASSWORD: ${WP_ADMIN_PASSWORD}
      WP_ADMIN_EMAIL: ${WP_ADMIN_EMAIL}
      CHILD_THEME: __PROJECT_NAME__
    volumes:
      - wp_data:/var/www/html
      # Thème ENFANT bind-monté en live (le parent + plugin viennent de l'image base).
      - ./apps/wordpress/theme-__PROJECT_NAME__:/var/www/html/wp-content/themes/__PROJECT_NAME__
      # Provisioning : en dev l'image est la BASE (pas l'image client qui le bake).
      - ./apps/wordpress/docker/bootstrap.sh:/bootstrap.sh:ro

  webapp:
    # Dev local : node nu + sources bind-montées → HMR Vite sans rebuild d'image.
    # (En prod, la webapp est buildée via apps/webapp/Dockerfile, hors de ce stack.)
    image: node:22-alpine
    working_dir: /workspace
    command: >
      sh -lc "corepack enable &&
      pnpm install --store-dir /pnpm/store &&
      pnpm --filter @__PROJECT_NAME__/webapp dev --host 0.0.0.0 --port 3000"
    depends_on:
      wordpress:
        condition: service_started
    ports:
      - "3000:3000"
    environment:
      # Watch fiable au travers d'un bind-mount Docker (cf. vite.config.ts).
      CHOKIDAR_USEPOLLING: "true"
      # URL PUBLIQUE inlinée par Vite → consommée par le navigateur (sur l'hôte).
      VITE_WORDPRESS_URL: ${VITE_WORDPRESS_URL}
      VITE_FRONTEND_URL: ${VITE_FRONTEND_URL}
      VITE_GRAPHQL_PATH: ${VITE_GRAPHQL_PATH}
      VITE_FEATURE_EDITORIAL: ${VITE_FEATURE_EDITORIAL}
      VITE_FEATURE_ECOMMERCE: ${VITE_FEATURE_ECOMMERCE}
      VITE_FEATURE_AUTH: ${VITE_FEATURE_AUTH}
      SESSION_SECRET: ${SESSION_SECRET}
      # URL INTERNE (réseau Docker) → court-circuite l'URL publique côté SSR.
      WORDPRESS_INTERNAL_URL: http://wordpress
    volumes:
      - ./:/workspace
      # node_modules en volumes nommés : isolés du bind-mont hôte (OS/arch ≠).
      - webapp_node_modules:/workspace/node_modules
      - webapp_app_node_modules:/workspace/apps/webapp/node_modules
      - webapp_pnpm_store:/pnpm/store

volumes:
  db_data:
  wp_data:
  webapp_node_modules:
  webapp_app_node_modules:
  webapp_pnpm_store:
