# syntax=docker/dockerfile:1

FROM dart:stable AS dart

# Download and build protoc-gen-dart.
WORKDIR /protoc/plugin

# hadolint ignore=DL3003
RUN \
  dart pub unpack protoc_plugin:22.4.0 \
  && cd /protoc/plugin/protoc_plugin* \
  && dart compile exe -o /protoc/plugin/protoc-gen-dart bin/protoc_plugin.dart

FROM debian:stable-slim AS base

# Copy protoc plugin for dart stage.
COPY --from=dart /protoc/plugin/protoc-gen-dart /usr/local/bin

# Install wget, unzip and ca-certificates.
# hadolint ignore=DL3008
RUN \
  apt-get update \
  && apt-get install --no-install-recommends -y \
      wget \
      unzip \
      ca-certificates \
  && rm -rf /var/lib/apt/lists/*

# Download protoc and move it to /usr/local/bin
WORKDIR /app/protoc
RUN \
  wget -q https://github.com/protocolbuffers/protobuf/releases/download/v29.3/protoc-29.3-linux-x86_64.zip \
  && unzip protoc-* \
  && mv bin/protoc /usr/local/bin
  
# Copy all proto definition files.
WORKDIR /app
COPY --chmod=755 proto/ ./proto

# Generate source files from proto definitions.
#
# Need to `cd` into directory with proto source files, otherwise `protoc` has
# problems when trying to find the proto source files.
# hadolint ignore=DL3003
RUN \
  mkdir /app/generated \
  && chmod 755 /app/generated \
  && cd /app/proto \
  && find . -type f -exec protoc --dart_out=/app/generated "{}" \; \
  && find /app/generated -type f -name "*.dart" -exec chmod 666 "{}" \;
