# syntax=docker/dockerfile:1.7

FROM dart:latest AS web_builder

RUN apt-get update && apt-get install -y --no-install-recommends \
    git \
    curl \
    unzip \
    xz-utils \
    libglu1-mesa \
    ca-certificates \
  && apt-get clean \
  && rm -rf /var/lib/apt/lists/*

RUN useradd -ms /bin/bash flutteruser

ENV PATH="/home/flutteruser/flutter/bin:${PATH}"

USER flutteruser
WORKDIR /home/flutteruser

RUN git clone --branch stable --depth 1 https://github.com/flutter/flutter.git \
  && flutter config --enable-web \
  && flutter precache --web \
  && flutter upgrade

COPY --chown=flutteruser:flutteruser frontend /home/flutteruser/app

# Build shared package code generation
WORKDIR /home/flutteruser/app/pshared
RUN flutter clean \
  && flutter pub get \
  && dart run build_runner build --delete-conflicting-outputs

# Build the web client
WORKDIR /home/flutteruser/app/pweb
RUN flutter clean \
  && flutter pub get \
  && flutter build web --release --no-tree-shake-icons

FROM caddy:alpine AS runtime

WORKDIR /usr/share/pweb

COPY frontend/pweb/entrypoint.sh /entrypoint.sh
COPY frontend/pweb/caddy/Caddyfile /etc/caddy/Caddyfile
COPY --from=web_builder /home/flutteruser/app/pweb/build/web /usr/share/pweb

RUN chmod +x /entrypoint.sh

EXPOSE 80 443

ENTRYPOINT ["/entrypoint.sh"]
