# Панель обведення областей (`editor/serve.py`) + конвеєр збірки уроків.
#
# Один образ на дві ролі: довгий сервіс `editor` і разові прогони конвеєра
# (`build.py`, `fields_*.py`) через `docker compose run cli …`.

FROM python:3.12-slim

# ── шрифти ───────────────────────────────────────────────────────────────
# Код звертається до шрифтів за macOS-шляхами (`ua_build/lessons.py`,
# `rebrand.py`, `verify/highlight_*.py`). Замість того щоб правити десятки
# рядків, кладемо в контейнері файли за тими самими шляхами.
#
# Liberation Sans **метрично сумісний** з Arial — та сама ширина кожного
# гліфа. Це принципово: верстка рахує `text_length()`, і шрифт іншої ширини
# зрушив би кожен рядок.
#
# Виняток — Arial Black: метрично сумісного відповідника не існує, підставлено
# Liberation Sans Bold. Контурний вірш рівня 0 набереться тоншим, ніж на маку.
# Тому фінальні PDF для друкарні збирай на маку, а контейнер лиши для панелі.
RUN apt-get update \
 && apt-get install -y --no-install-recommends fonts-liberation tini \
 && rm -rf /var/lib/apt/lists/* \
 && mkdir -p "/System/Library/Fonts/Supplemental" \
 && L=/usr/share/fonts/truetype/liberation \
 && ln -s $L/LiberationSans-Regular.ttf    "/System/Library/Fonts/Supplemental/Arial.ttf" \
 && ln -s $L/LiberationSans-Bold.ttf       "/System/Library/Fonts/Supplemental/Arial Bold.ttf" \
 && ln -s $L/LiberationSans-Italic.ttf     "/System/Library/Fonts/Supplemental/Arial Italic.ttf" \
 && ln -s $L/LiberationSans-BoldItalic.ttf "/System/Library/Fonts/Supplemental/Arial Bold Italic.ttf" \
 && ln -s $L/LiberationSans-Bold.ttf       "/System/Library/Fonts/Supplemental/Arial Black.ttf" \
 && mkdir -p "/System/Library/Fonts" \
 && ln -s $L/LiberationSans-Regular.ttf    "/System/Library/Fonts/SFNSRounded.ttf"

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

# `editor/` тримає і КОД панелі (regions.html, serve.py, make_page.py), і
# ДАНІ (PNG сторінок, набори областей). Дані мають бути на томі, код — ні:
# том, змонтований у /app/editor, інакше заморозив би панель на стані
# першого запуску, і `git pull && up --build` нічого б не змінював.
# Тому лишаємо поза томом еталонну копію — entrypoint кладе її поверх.
RUN cp -a /app/editor /opt/editor-dist

# `serve.py` типово шукає інтерпретатор у `.venv/bin/python` — у контейнері
# його немає, тому підсовуємо системний за тим самим шляхом.
RUN mkdir -p .venv/bin && ln -sf /usr/local/bin/python .venv/bin/python

# Панель пише в `editor/`, `art_apply.py` — у `forms/`. Обидві теки під
# томами, тож власник має збігатися з користувачем контейнера.
RUN useradd -u 1000 -m app && chown -R app:app /app
USER app

COPY --chown=app:app deploy/entrypoint.sh /entrypoint.sh

EXPOSE 8765
ENTRYPOINT ["/usr/bin/tini", "--", "/entrypoint.sh"]
