FROM alpine:latest

# Diretório de trabalho
WORKDIR /app

# UID/GID configuráveis para compatibilizar permissões em bind mounts Linux
ARG APP_UID=1000
ARG APP_GID=1000

# Instalar Python no Alpine e criar alias `python`
RUN apk add --no-cache python3 py3-pip \
    && ln -sf python3 /usr/bin/python

# Instalar dependências Python em venv usando build deps temporários
COPY requirements.txt .
RUN apk add --no-cache --virtual .build-deps \
    gcc \
    musl-dev \
    linux-headers \
    && python -m venv /venv \
    && /venv/bin/pip install --upgrade pip \
    && /venv/bin/pip install --no-cache-dir -r requirements.txt \
    && apk del .build-deps

# Copiar código da aplicação
COPY . .

# Criar usuário sem privilégios e diretórios de escrita necessários
RUN addgroup -S -g "${APP_GID}" appgroup \
    && adduser -S -D -H -u "${APP_UID}" -G appgroup appuser \
    && mkdir -p /data /app/logs \
    && chown -R appuser:appgroup /app /data /venv

# Ambiente padrão
ENV PATH="/venv/bin:$PATH" \
    FLASK_APP=app.py \
    FLASK_ENV=production \
    PYTHONDONTWRITEBYTECODE=1 \
    PYTHONUNBUFFERED=1

# Rodar aplicação como usuário não-root
USER appuser

# Expor a porta que o Flask usa
EXPOSE 5000

# Comando para rodar a aplicação
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "app:app"]
