# ==========================
# Etapa de build
# ==========================
FROM node:22-alpine AS build

# Directorio de trabajo
WORKDIR /app

# Configurar npm para trabajar con certificados autofirmados e instalar pnpm
RUN npm config set strict-ssl false && \
    npm install -g pnpm

# Copiar archivos de dependencias
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./

# Instalar dependencias con pnpm
RUN pnpm install --frozen-lockfile

ARG VITE_API_URL
ENV VITE_API_URL=${VITE_API_URL}

ARG VITE_KEYCLOAK_URL
ENV VITE_KEYCLOAK_URL=${VITE_KEYCLOAK_URL}

ARG VITE_KEYCLOAK_REALM=master
ENV VITE_KEYCLOAK_REALM=${VITE_KEYCLOAK_REALM}

ARG VITE_KEYCLOAK_CLIENT_ID=anexo76-frontend
ENV VITE_KEYCLOAK_CLIENT_ID=${VITE_KEYCLOAK_CLIENT_ID}

# URL pública del Hub Workspace (bakeada en build para el browser)
ARG VITE_HUB_URL=https://workspace.aduanasoft.com
ENV VITE_HUB_URL=${VITE_HUB_URL}

ARG INTERNAL_API_URL
ENV INTERNAL_API_URL=${INTERNAL_API_URL}

# Copiar el resto del código
COPY . .

# Construir el proyecto
RUN pnpm run build


# ==========================
# Etapa de ejecución con Node.js
# ==========================
FROM node:22-alpine AS runtime

WORKDIR /app

RUN apk add --no-cache wget

RUN npm config set strict-ssl false && \
    npm install -g pnpm

# Crear usuario no-root para seguridad antes de copiar con --chown
RUN addgroup -g 1001 -S nodejs
RUN adduser -S svelte -u 1001

COPY docker-entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

# Copiar solo archivos necesarios para producción y aplicar propietario en la copia
COPY --from=build --chown=svelte:nodejs /app/build ./build
COPY --from=build --chown=svelte:nodejs /app/package.json ./
COPY --from=build --chown=svelte:nodejs /app/node_modules ./node_modules

# WORKDIR /app queda owned por root; pnpm necesita crear _tmp_* en el cwd al ejecutar scripts.
RUN chown svelte:nodejs /app

USER svelte

# Puerto para SvelteKit con adapter-node
EXPOSE 5173

# Variables de entorno
ENV NODE_ENV=production
ENV PORT=5173
ENV HOST=0.0.0.0

# IMPORTANTE: Estas variables se pueden sobrescribir en docker-compose
# pero necesitamos valores por defecto para el build
ENV INTERNAL_API_URL=http://backend:8000/api/

ENTRYPOINT ["/entrypoint.sh"]

# Ejecutar aplicación con Node.js
CMD ["pnpm", "start"]
