# --------
# STAGE: base runtime con Node e strumenti minimi
# --------
FROM node:20-bookworm-slim AS runtime-base

# Impostazioni ambiente e sicurezza build
ENV DEBIAN_FRONTEND=noninteractive \
    PIP_NO_CACHE_DIR=1 \
    PYTHONDONTWRITEBYTECODE=1 \
    PYTHONUNBUFFERED=1 \
    NODE_ENV=production

# Aggiorna e installa Python + strumenti
# Nota: build-essential utile per pacchetti Python nativi (puoi rimuoverlo se non necessario)
RUN apt-get update && apt-get install -y --no-install-recommends \
      python3 python3-venv python3-pip \
      ca-certificates curl tini \
      build-essential \
    && rm -rf /var/lib/apt/lists/*

# Workdir applicazione
WORKDIR /usr/src/app

# Crea utente non-root e cartelle
#RUN useradd -m -u 10001 appuser \
#    && mkdir -p /usr/src/app \
#    && chown -R appuser:appuser /usr/src/app

# --------
# STAGE: dipendenze Node
# --------
FROM runtime-base AS node-deps

WORKDIR /usr/src/app

#copia tutto
COPY . .
COPY downloadsite-docker.sh downloadsite.sh
# Installa packages e dipendenze
RUN npm ci --only=production

# --------
# STAGE: dipendenze Python (venv)
# --------
FROM node-deps AS python-deps

WORKDIR /usr/src/app

# crea venv
RUN python3 -m venv /opt/pyenv \
    && /opt/pyenv/bin/pip install --upgrade pip \
    && /opt/pyenv/bin/pip install -r requirements.txt

# --------
# STAGE: final image
# --------
FROM python-deps AS final

# Riduci ulteriormente l'immagine togliendo strumenti di build se li avevi installati
# (In questo esempio li teniamo per eventuali run-time native libs; opzionale rimuoverli con apt-get purge)
WORKDIR /usr/src/app



# Imposta PATH per usare il venv e crea symlink "python3" puntato al venv
ENV PATH="/opt/pyenv/bin:${PATH}"
ENV PATH="/usr/src/app:${PATH}"
# Symlink esplicito utile se il tuo codice chiama "python3" hard-coded
RUN ln -sf /opt/pyenv/bin/python /usr/local/bin/python3

# Sicurezza: esegui come utente non-root
#USER appuser

# Espone la porta dell'Express server
EXPOSE 3600

# Healthcheck semplice sulla root
#HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \
#  CMD curl -fsS http://localhost:3000/ || exit 1

# Usa tini come init per gestire segnali e orphan processes
ENTRYPOINT ["/usr/bin/tini", "--"]


# Avvio
CMD ["node", "server_docker.js"]
