# VeedonAI Edge — الحزمة الموزّعة (تُسحب من veedon.ai/dist)
# يشغّلها install.sh في /opt/veedonai. الصور من سجل veedon.ai (أو محلية للاختبار).
#
# white-label: المحرك بلا أي منفذ منشور — العميل لا يرى إلا منصة VeedonAI.
# حماية: الوكيل يحسب بصمة العتاد؛ المحرك لا يعمل إلا بعد موافقة الأدمن + تطابق البصمة.
# تصلّب (P4): no-new-privileges + حدود موارد + وسيط MQTT محلي لـ VDE + مفتاح توقيع الموديولات.

services:
  mosquitto:                       # وسيط MQTT: Frigate ينشر الأحداث، VDE يشترك
    image: eclipse-mosquitto:2
    container_name: veedonai-mosquitto
    restart: unless-stopped
    command: sh -c "printf 'listener 1883 0.0.0.0\nallow_anonymous true\n' > /m.conf; exec mosquitto -c /m.conf"
    security_opt: ["no-new-privileges:true"]
    mem_limit: 64m

  veedonai-engine:
    image: ${VEEDON_ENGINE_IMAGE:-registry.veedon.ai/veedonai/edge-engine:stable}
    container_name: veedonai-engine
    restart: unless-stopped
    stop_grace_period: 30s
    shm_size: "256mb"
    security_opt: ["no-new-privileges:true"]
    mem_limit: ${VEEDON_ENGINE_MEM:-3g}
    cpus: ${VEEDON_ENGINE_CPUS:-2}
    volumes:
      - ./config:/config
      - ./storage:/media/frigate
    depends_on:
      - mosquitto
    # لا ports: — مقصود (مخفي تماماً)

  veedonai-tunnel:                 # نفق NAT (اختياري) — وصول حيّ لصفحات المحرك خلف NAT
    image: snowdreamtech/frpc:latest
    container_name: veedonai-tunnel
    restart: unless-stopped
    profiles: ["tunnel"]           # يُفعَّل: docker compose --profile tunnel up -d
    security_opt: ["no-new-privileges:true"]
    mem_limit: 64m
    volumes:
      - ./frpc.toml:/etc/frp/frpc.toml:ro
    depends_on:
      - veedonai-engine

  veedonai-agent:
    image: ${VEEDON_AGENT_IMAGE:-registry.veedon.ai/veedonai/edge-agent:stable}
    container_name: veedonai-agent
    restart: unless-stopped
    security_opt: ["no-new-privileges:true"]
    mem_limit: ${VEEDON_AGENT_MEM:-512m}
    cpus: ${VEEDON_AGENT_CPUS:-1}
    environment:
      - VEEDON_CLOUD_URL=${VEEDON_CLOUD_URL}
      - VEEDON_DEVICE_TOKEN=${VEEDON_DEVICE_TOKEN}
      - VEEDON_ENGINE_URL=http://veedonai-engine:5000
      - VEEDON_ENGINE_CONTAINER=veedonai-engine
      - VEEDON_MQTT_HOST=${VEEDON_MQTT_HOST:-mosquitto}
      # مفتاح توقيع الموديولات (يزوّده install.sh) — بدونه لا تُحمّل موديولات OTA (أمان)
      - VEEDON_MODULE_PUBKEY=${VEEDON_MODULE_PUBKEY:-}
      # مزوّد الرؤية السحابي/المحلي (خصوصية) — يُضبط حسب العميل
      - VEEDON_VLM_PROVIDER=${VEEDON_VLM_PROVIDER:-claude}
      - VEEDON_VLM_URL=${VEEDON_VLM_URL:-}
      - VEEDON_VLM_MODEL=${VEEDON_VLM_MODEL:-}
      # بصمة العتاد يمرّرها install.sh (بلا تركيب /sys — يعمل على كل المنصات)
      - VEEDON_HW_MACHINE_ID=${VEEDON_HW_MACHINE_ID:-}
      - VEEDON_HW_UUID=${VEEDON_HW_UUID:-}
      - VEEDON_HW_SERIAL=${VEEDON_HW_SERIAL:-}
      - VEEDON_HW_PRODUCT_SERIAL=${VEEDON_HW_PRODUCT_SERIAL:-}
      - VEEDON_HW_VENDOR=${VEEDON_HW_VENDOR:-}
      - VEEDON_HW_MODEL=${VEEDON_HW_MODEL:-}
    volumes:
      - ./config:/config
      - ./models:/models          # يشمل vde_modules/ لحزم OTA الموقّعة
      # الوكيل يعيد تشغيل المحرك عبر السوكِت (OTA) → يحتاج وصولاً كاملاً.
      # ponytail: التصلّب الأمثل = docker-socket-proxy يحصر واجهة الـAPI؛ ترقية عند التوسّع.
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - veedonai-engine
      - mosquitto
