# Announcer kjøres i Docker på klienten som er koblet til høyttaleranlegget.
#
# Lyden er det som gjør bildet litt uvanlig: containeren må nå vertens
# lydserver. Det løses i compose.yaml ved å montere inn vertens
# XDG_RUNTIME_DIR og kjøre som samme bruker-ID som eier socketen – ikke her.
FROM python:3.13-slim

# ffmpeg: edge_pcm() dekoder MP3 med den, og egne jinglefiler normaliseres
# med den. pipewire-bin gir pw-play, pulseaudio-utils gir paplay; koden
# velger selv hvilken som finnes (player_cmd()), så begge lydservere virker.
RUN apt-get update \
 && apt-get install -y --no-install-recommends \
      ffmpeg ca-certificates tzdata pipewire-bin pulseaudio-utils \
 && rm -rf /var/lib/apt/lists/*

COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv

ENV UV_PROJECT_ENVIRONMENT=/opt/venv \
    UV_COMPILE_BYTECODE=1 \
    PATH=/opt/venv/bin:$PATH \
    PYTHONUNBUFFERED=1

WORKDIR /app
COPY pyproject.toml uv.lock ./
RUN uv sync --frozen --no-dev

# Koden sist, så avhengighetslaget gjenbrukes når bare appen endres.
COPY announcer.py auth.py config.py schedule.py index.html ./

# Alt som skal overleve en ny container ligger under /data, som monteres
# inn fra verten. Stemmene er ~670 MB og lastes ned ved første oppstart.
ENV ANNOUNCER_VOICES=/data/voices \
    ANNOUNCER_CACHE=/data/cache \
    ANNOUNCER_CHIMES=/data/chimes \
    ANNOUNCER_LOG=/data/logs/announcements.jsonl \
    ANNOUNCER_STATE=/data/instance \
    ANNOUNCER_SCHEDULE=/data/scheduled.json \
    ANNOUNCER_CONFIG=/data/config.toml \
    ANNOUNCER_PORT=8090

EXPOSE 8090
# Ingen --host her: ANNOUNCER_HOST (BIND_IP i .env) bestemmer. Med host-nett
# er det den bindingen som avgjør hvem som når sida.
CMD ["python", "announcer.py"]
