# #region docker.frontend.Dockerfile [C:3] [TYPE Module] [SEMANTICS docker,frontend,build,nginx,ssl]
# @BRIEF Frontend Dockerfile — сборка SvelteKit (node:20) + nginx runtime с опциональным SSL.
# @LAYER Infrastructure
# @RELATION DEPENDS_ON -> [EXT:path:docker/nginx.conf]
# @RELATION DEPENDS_ON -> [EXT:path:docker/nginx.ssl.conf]
# @RELATION DEPENDS_ON -> [EXT:path:docker/frontend.entrypoint.sh]
# @RELATION DEPENDS_ON -> [EXT:path:frontend/package.json]
# @PRE Docker builder context — корень проекта. frontend/ и docker/ доступны.
# @POST nginx:alpine образ со статикой SvelteKit, entrypoint для выбора HTTP/SSL конфига.
# #endregion docker.frontend.Dockerfile

FROM node:20-alpine AS build
ARG APP_VERSION=0.0.0
ENV APP_VERSION=${APP_VERSION}
WORKDIR /app/frontend

COPY frontend/package*.json ./
RUN npm ci --legacy-peer-deps

COPY frontend/ ./
RUN npm run build


FROM nginx:1.27-alpine

# ca-certificates и openssl для установки корп. сертификатов и проверки SSL ключей
RUN apk add --no-cache ca-certificates openssl

# HTTP-only конфиг (по умолчанию)
COPY docker/nginx.conf /docker/nginx.conf

# SSL конфиг (активируется entrypoint при наличии сертификатов)
COPY docker/nginx.ssl.conf /docker/nginx.ssl.conf

# Entrypoint — установка CA-сертификатов, выбор HTTP/SSL конфига
COPY docker/frontend.entrypoint.sh /docker/entrypoint.sh
RUN chmod +x /docker/entrypoint.sh

# Статика из сборки
COPY --from=build /app/frontend/build /usr/share/nginx/html

EXPOSE 80 443

ENTRYPOINT ["/docker/entrypoint.sh"]
CMD ["nginx", "-g", "daemon off;"]
