FROM python:3.12-bookworm

ENV PYTHONUNBUFFERED=1 \
    PYTHONDONTWRITEBYTECODE=1 \
    DEBIAN_FRONTEND=noninteractive \
    NEXT_TELEMETRY_DISABLED=1

WORKDIR /app

# System deps:
# - supervisor: run multiple processes in one container (per request)
# - redis-server, rabbitmq-server: local infra
# - ffmpeg: required by agent runtime audio stack
# - build-essential: wheels/native deps
RUN apt-get update && apt-get install -y --no-install-recommends \
    ca-certificates \
    curl \
    gnupg \
    supervisor \
    redis-server \
    rabbitmq-server \
    ffmpeg \
    build-essential \
  && rm -rf /var/lib/apt/lists/*

# Node.js 20 (for Next.js)
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
  && apt-get update && apt-get install -y --no-install-recommends nodejs \
  && rm -rf /var/lib/apt/lists/*

# Python deps (repo root consolidated requirements — includes all livekit-plugins-* used by MCube + agent)
COPY requirements.txt /app/requirements.txt
RUN python -m pip install --no-cache-dir -U pip \
 && python -m pip install --no-cache-dir -r /app/requirements.txt \
 && python -c "from livekit.plugins import cartesia, deepgram, elevenlabs, noise_cancellation, silero; import importlib; importlib.import_module('livekit.plugins.turn_detector')"

# App code
COPY backend /app/backend
COPY frontend /app/frontend
COPY masterpanel /app/masterpanel
COPY docker /app/docker

# Build frontend once (production server on :3000)
WORKDIR /app/frontend
RUN if [ -f package-lock.json ]; then npm ci; else npm install; fi \
 && npm run build

WORKDIR /app/masterpanel
RUN if [ -f package-lock.json ]; then npm ci; else npm install; fi \
 && npm run build

WORKDIR /app

# Fail the image build if MCube worker imports break (catches missing modules like pipeline_log).
WORKDIR /app/backend/agent_runtime
RUN PYTHONPATH=src python -c "\
import mcube_integration.pipeline_log; \
import mcube_integration.service_log; \
import mcube_integration.webhook_server; \
import mcube_integration.ws_bridge; \
import mcube_integration.ai_worker; \
print('mcube_integration imports ok')"

WORKDIR /app

# Supervisor config + entrypoint
RUN sed -i 's/\r$//' /app/docker/entrypoint.sh /app/docker/supervisord.conf /app/backend/.env.docker \
 && chmod +x /app/docker/entrypoint.sh

# Ports (requested)
EXPOSE 6379 5672 8000 8002 9001 8088 3000 4040 4174

ENTRYPOINT ["/app/docker/entrypoint.sh"]
