# =========================================================================
# FÁZE 1: Builder – Zde zkompilujeme Python 3.14 a náročné C/C++ knihovny
# =========================================================================
FROM ghcr.io/home-assistant/armv7-homeassistant-base:2025.11.3 AS builder

# 1. Čisté minimum pro kompilaci samotného Pythonu 3.14 (rychle se nacachuje)
RUN apk add --no-cache \
    build-base ffi-dev openssl-dev bzip2-dev zlib-dev \
    readline-dev sqlite-dev xz-dev wget musl-dev

# 2. Stažení a nativní kompilace Pythonu 3.14.9
RUN wget https://python.org && \
    tar -xf Python-3.14.9.tar.xz && \
    cd Python-3.14.9 && \
    ./configure --enable-optimizations --with-ensurepip=install && \
    make -j$(nproc) && \
    make altinstall && \
    cd .. && rm -rf Python-3.14.9*

# 3. Přesměrování výchozích příkazů a instalace uv
RUN ln -sf /usr/local/bin/python3.14 /usr/local/bin/python3 && \
    ln -sf /usr/local/bin/pip3.14 /usr/local/bin/pip3 && \
    pip3 install --no-cache-dir uv

# 4. Dodatečné nástroje pro kompilaci Python balíčků (NumPy, PyAV, atd.)
RUN apk add --no-cache \
    cmake rust cargo samurai ccache autoconf automake \
    jpeg-dev openjpeg-dev tiff-dev freetype-dev lcms2-dev libwebp-dev \
    ffmpeg-dev pkgconfig

# 5. Příprava textových souborů závislostí z nejnovějšího Home Assistanta
WORKDIR /tmp
COPY requirements.txt ./
COPY homeassistant/*.txt ./homeassistant/

# 6. Kompilace NumPy 2.3+ s Meson fixem pro 32-bitový formát čísel (IEEE_DOUBLE_LE)
RUN --mount=type=cache,target=/root/.cache/uv \
    echo -e "[properties]\nlongdouble_format = 'IEEE_DOUBLE_LE'" > /tmp/meson-native.ini && \
    uv pip install \
      --config-settings=setup-args="--native-file=/tmp/meson-native.ini" \
      --config-settings=compile-args="-j$(nproc)" \
      --index-strategy unsafe-best-match \
      --target /compiled-packages \
      -r requirements.txt && \
    rm /tmp/meson-native.ini


# =========================================================================
# FÁZE 2: Finální běhové prostředí s nejnovějším Core kódem
# =========================================================================
FROM ghcr.io/home-assistant/homeassistant-base:latest

# Nastavení systémových proměnných pro uv
ENV \
    S6_SERVICES_GRACETIME=240000 \
    UV_SYSTEM_PYTHON=true \
    UV_NO_CACHE=true

# Zkopírování zkompilovaného Pythonu 3.14 a balíčků z první fáze
COPY --from=builder /usr/local /usr/local
COPY --from=builder /compiled-packages /compiled-packages

# Přesměrování cest, aby systém viděl naše zkompilované balíčky
ENV PYTHONPATH="/compiled-packages:${PYTHONPATH}"

WORKDIR /usr/src
COPY rootfs /
COPY --from=ghcr.io/alexxit/go2rtc:1.9.14 /usr/local/bin/go2rtc /bin/go2rtc

# 7. Instalace Core závislostí bez --no-build flagu a s opravou chybějících maker pro PyAV
COPY --parents requirements.txt homeassistant/package_constraints.txt homeassistant/
RUN \
    go2rtc --version \
    && pip3 install --no-cache-dir "uv==$(awk -F'==' '/^uv==/{print $2}' homeassistant/requirements.txt)" \
    && export CFLAGS="-DAVERROR_HTTP_TOO_MANY_REQUESTS=-1112362804 -DAV_FRAME_DATA_LCEVC=2" \
    && export UV_CONCURRENT_BUILDS=1 \
    && uv pip install \
        --index-strategy unsafe-best-match \
        -r homeassistant/requirements.txt

# 8. Instalace všech integrací (requirements_all)
COPY requirements_all.txt home_assistant_frontend-* home_assistant_intents-* homeassistant/
RUN \
    if ls homeassistant/home_assistant_*.whl 1> /dev/null 2>&1; then \
        uv pip install homeassistant/home_assistant_*.whl; \
    fi \
    && export CFLAGS="-DAVERROR_HTTP_TOO_MANY_REQUESTS=-1112362804 -DAV_FRAME_DATA_LCEVC=2" \
    && export UV_CONCURRENT_BUILDS=1 \
    && uv pip install \
        --index-strategy unsafe-best-match \
        -r homeassistant/requirements_all.txt

# 9. Finální sestavení Home Assistant Core a předkompilace do .pyc
COPY --parents LICENSE* README* homeassistant/ pyproject.toml homeassistant/
RUN \
    uv pip install \
        -e ./homeassistant \
    && python3 -m compileall \
        homeassistant/homeassistant

WORKDIR /config
docker buildx build --platform linux/arm/v7 --progress=plain -t my-custom-homeassistant:latest .