# =====================================================================
# DEV (remote VPS, тот же хост, что и netrunner-backend dev-remote:
# 45.76.161.137, DNS A-record dev.netrunner-vpn.com) — тот же принцип, что
# и прод: тянем готовые образы из GHCR и запускаем. В отличие от прода,
# порты открыты не только на 127.0.0.1 — на dev нет reverse-proxy/TLS
# перед сервисами (см. netrunner-backend/.env.dev-remote.example).
#
# Используем доменное имя, а не голый IP, намеренно: Telegram Login Widget
# требует настоящий домен, зарегистрированный в BotFather (/setdomain) —
# на IP виджет отвечает "Bot domain invalid" независимо от кода.
# =====================================================================
services:
  # Фронтенд (Next.js)
  landing:
    image: ${IMAGE:-gitea.netrunner-vpn.com/nineap/netrunner-landing:latest}
    container_name: netrunner-landing-dev
    restart: always
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
      # PB_PUBLIC_URL — адрес PocketBase, который реально используют клиентские
      # компоненты (Pricing, TerminalGuestbook, docs/download/terminal-client.tsx):
      # он читается на сервере в соответствующих page.tsx и прокидывается пропсом
      # (тот же паттерн, что и ACCOUNT_ORIGIN для auth). NEXT_PUBLIC_PB_URL ниже
      # оставлен для остальных мест (Faq/BlogPreview/blog — серверные компоненты,
      # получают данные через PB_INTERNAL_URL, а NEXT_PUBLIC_PB_URL там нужен только
      # как дефолт/для URL картинок) — саму переменную NEXT_PUBLIC_PB_URL Next.js
      # зашивает в бандл на этапе сборки образа в CI и не перечитывает при старте
      # контейнера, поэтому она НЕ годится для рантайм-конфигурации, в отличие от
      # PB_PUBLIC_URL (обычная, не NEXT_PUBLIC_-переменная).
      - PB_PUBLIC_URL=http://dev.netrunner-vpn.com:8090/cms-api
      - NEXT_PUBLIC_PB_URL=http://dev.netrunner-vpn.com:8090/cms-api
      - NEXT_PUBLIC_PROXY_URL=http://dev.netrunner-vpn.com:3001
      - PB_INTERNAL_URL=http://netrunner-cms:8090
      # Единая авторизация: смотрим на dev-бэкенд через Caddy (порт 443,
      # настоящий TLS) — НЕ напрямую на :8080. Бэкенд на dev теперь ставит
      # сессионные cookie с атрибутом Secure (как в проде, раз уже есть TLS),
      # такую cookie браузер примет только с ответа по HTTPS; см.
      # netrunner-backend WEB_APP_BASE_URL/COOKIE_SECURE в .env.dev-remote.example
      # и Caddyfile.dev (Caddy нужен и ради Telegram Web Apps, которым обязателен
      # https://, и ради Telegram Login Widget, которому в браузере обязателен
      # именно порт 443). Без NEXT_PUBLIC_ — читаются на сервере
      # (app/[lang]/auth/page.tsx), поэтому реально применяются в рантайме
      # этого образа, а не только прод-образа, собранного с другими значениями.
      - ACCOUNT_ORIGIN=https://dev.netrunner-vpn.com
      - API_URL=https://dev.netrunner-vpn.com/api/v1
      # ОБЯЗАТЕЛЬНО задать явно (без дефолта на прод-бота!) в .env на сервере —
      # отдельный dev-бот, заведённый через @BotFather специально под
      # dev.netrunner-vpn.com. Молчаливый фолбэк на прод-бота приводил ровно
      # к "Bot domain invalid": у прод-бота в BotFather уже прописан прод-домен.
      - BOT_USERNAME=${BOT_USERNAME:?"Задай BOT_USERNAME dev-бота в .env — см. комментарий выше"}
    depends_on:
      - ws-proxy
    networks:
      - netrunner-network-dev

  # CMS (PocketBase) — отдельные данные от прода, свой volume.
  netrunner-cms:
    image: ghcr.io/muchobien/pocketbase:latest
    container_name: netrunner-cms-dev
    restart: unless-stopped
    command:
      - serve
      - --http=0.0.0.0:8090
      - --dir=/pb_data
    ports:
      - "8090:8090"
    volumes:
      - ./pb_data_dev:/pb_data
    networks:
      - netrunner-network-dev

  # Прокси-слой (Rust)
  ws-proxy:
    image: gitea.netrunner-vpn.com/nineap/netrunner-landing-proxy:latest
    container_name: netrunner-ws-proxy-dev
    restart: always
    ports:
      - "3001:3001"
    environment:
      - PB_INTERNAL_URL=http://netrunner-cms:8090
    depends_on:
      - netrunner-cms
    networks:
      - netrunner-network-dev

networks:
  netrunner-network-dev:
    driver: bridge
