# =========================================================
# GenieACS — UniFi Theme Fork
# Multi-stage build:
#   Stage 1 (builder): instala devDeps + compila o projeto
#   Stage 2 (runtime): imagem mínima só com dist/ + prodDeps
# =========================================================

# ── Stage 1: builder ─────────────────────────────────────
FROM node:20-alpine AS builder

# Dependências de sistema necessárias para o build
# (git é exigido pelo build.ts para calcular o metadata de versão)
RUN apk add --no-cache git python3 make g++

WORKDIR /build

# Copiar manifests primeiro para cache de camadas do npm install
COPY package.json npm-shrinkwrap.json ./

# Instalar TODAS as dependências (incluindo devDependencies)
RUN npm ci --fund=false --audit=false

# Copiar o restante do fonte
COPY . .

# Compilar o projeto (gera dist/)
RUN npm run build

# ── Stage 2: runtime ─────────────────────────────────────
FROM node:20-alpine AS runtime

# Timezone e utilitários mínimos
RUN apk add --no-cache tzdata dumb-init

WORKDIR /opt/genieacs

# Copiar artefatos compilados
COPY --from=builder /build/dist ./

# Instalar apenas dependências de produção a partir do dist/
RUN npm ci --omit=dev --fund=false --audit=false

# Criar diretórios de configuração e extensões
RUN mkdir -p \
      /opt/genieacs/config/ext \
      /opt/genieacs/logs \
    && addgroup -S genieacs \
    && adduser  -S -G genieacs genieacs \
    && chown -R genieacs:genieacs /opt/genieacs

USER genieacs

# Variáveis de ambiente padrão (sobrescreva no compose ou .env)
ENV GENIEACS_MONGODB_CONNECTION_URL=mongodb://mongo:27017/genieacs \
    GENIEACS_EXT_DIR=/opt/genieacs/config/ext \
    GENIEACS_LOG_FORMAT=json \
    GENIEACS_ACCESS_LOG_FORMAT=json \
    GENIEACS_UI_JWT_SECRET=change-me-in-production \
    GENIEACS_CWMP_WORKER_PROCESSES=1 \
    GENIEACS_NBI_WORKER_PROCESSES=1 \
    GENIEACS_FS_WORKER_PROCESSES=1 \
    GENIEACS_UI_WORKER_PROCESSES=1

# Expor todas as portas dos serviços
EXPOSE 3000 7547 7557 7567

# dumb-init garante propagação correta de sinais
ENTRYPOINT ["/usr/bin/dumb-init", "--"]
