# Multi-stage build con PyInstaller per protezione totale del codice
# Stage 1: Build con PyInstaller
FROM python:3.12-slim AS builder

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

# Installa binutils richiesto da PyInstaller
RUN apt-get update && apt-get install -y binutils && rm -rf /var/lib/apt/lists/*

WORKDIR /app

# Copia i file necessari per la build
COPY pyproject.toml ./
COPY src/ ./src/
COPY certs/ ./certs/
COPY matlab_func/ ./matlab_func/

# Installa le dipendenze e PyInstaller
RUN uv pip install --system -e . && \
    uv pip install --system pyinstaller

# Compila tutti gli entry point con PyInstaller
# Ogni entry point diventa un binario standalone
# Include metadata per pacchetti che lo richiedono
RUN pyinstaller \
    --onefile \
    --name load_orchestrator \
    --collect-all src \
    --collect-all certs \
    --collect-all matlab_func \
    --collect-all aioftp \
    --collect-all aiomysql \
    --collect-all aiofiles \
    --collect-all aiosmtplib \
    --collect-all cryptography \
    --hidden-import=src \
    --hidden-import=src.utils \
    --hidden-import=src.refactory_scripts \
    src/load_orchestrator.py && \
    pyinstaller \
    --onefile \
    --name elab_orchestrator \
    --collect-all src \
    --collect-all certs \
    --collect-all matlab_func \
    --collect-all aioftp \
    --collect-all aiomysql \
    --collect-all aiofiles \
    --collect-all aiosmtplib \
    --collect-all cryptography \
    --hidden-import=src \
    --hidden-import=src.utils \
    --hidden-import=src.refactory_scripts \
    src/elab_orchestrator.py && \
    pyinstaller \
    --onefile \
    --name send_orchestrator \
    --collect-all src \
    --collect-all certs \
    --collect-all matlab_func \
    --collect-all aioftp \
    --collect-all aiomysql \
    --collect-all aiofiles \
    --collect-all aiosmtplib \
    --collect-all cryptography \
    --hidden-import=src \
    --hidden-import=src.utils \
    --hidden-import=src.refactory_scripts \
    src/send_orchestrator.py && \
    pyinstaller \
    --onefile \
    --name ftp_csv_receiver \
    --collect-all src \
    --collect-all certs \
    --collect-all matlab_func \
    --collect-all aioftp \
    --collect-all aiomysql \
    --collect-all aiofiles \
    --collect-all aiosmtplib \
    --collect-all cryptography \
    --hidden-import=src \
    --hidden-import=src.utils \
    --hidden-import=src.refactory_scripts \
    src/ftp_csv_receiver.py

# Crea directory per runtime (saranno montate come volumi)
RUN mkdir -p /app/dist/logs /app/dist/aseftp/csvfs /app/dist/matlab_runtime /app/dist/env

# ====================================================================
# STAGE 2: IMMAGINE FINALE (RUNTIME MINIMA)
# Contiene solo il binario compilato, nessun codice sorgente.
# ====================================================================
FROM python:3.12-slim

WORKDIR /app

# Copia tutti i binari compilati
COPY --from=builder /app/dist/load_orchestrator ./load_orchestrator
COPY --from=builder /app/dist/elab_orchestrator ./elab_orchestrator
COPY --from=builder /app/dist/send_orchestrator ./send_orchestrator
COPY --from=builder /app/dist/ftp_csv_receiver ./ftp_csv_receiver

# Copia i dati statici necessari
COPY certs/ ./certs/
COPY matlab_func/ ./matlab_func/

# Copia le directory vuote per runtime (saranno montate come volumi)
RUN mkdir -p ./logs ./aseftp/csvfs ./matlab_runtime ./env

# Rendi tutti gli eseguibili executable
RUN chmod +x ./load_orchestrator ./elab_orchestrator ./send_orchestrator ./ftp_csv_receiver

# Variabili ambiente
ENV PYTHONUNBUFFERED=1

# Default: elab_orchestrator (sarà sovrascritto da docker-compose)
CMD ["./elab_orchestrator"]