FROM gradle:9.6.1-jdk17@sha256:7364ce528f33bb6038672bcef990d524f1ad8fbc292935819c235db886d0fae7 AS android-base

USER root

ARG ANDROID_COMMAND_LINE_TOOLS_VERSION=15859902
ARG ANDROID_COMMAND_LINE_TOOLS_SHA1=040d3996a65543d22ec4bf73e4c37aa37a8d4af4

ENV ANDROID_HOME=/opt/android-sdk
ENV ANDROID_SDK_ROOT=/opt/android-sdk
ENV PATH="${PATH}:${ANDROID_HOME}/cmdline-tools/latest/bin:${ANDROID_HOME}/platform-tools"

RUN apt-get update \
    && apt-get install -y --no-install-recommends curl unzip \
    && rm -rf /var/lib/apt/lists/*

RUN mkdir -p "${ANDROID_HOME}/cmdline-tools" \
    && curl -fsSL \
        "https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_COMMAND_LINE_TOOLS_VERSION}_latest.zip" \
        -o /tmp/android-command-line-tools.zip \
    && echo "${ANDROID_COMMAND_LINE_TOOLS_SHA1}  /tmp/android-command-line-tools.zip" \
        | sha1sum -c - \
    && unzip -q /tmp/android-command-line-tools.zip -d /tmp/android-command-line-tools \
    && mv /tmp/android-command-line-tools/cmdline-tools "${ANDROID_HOME}/cmdline-tools/latest" \
    && rm -rf /tmp/android-command-line-tools /tmp/android-command-line-tools.zip

RUN android --no-metrics --sdk="${ANDROID_HOME}" sdk install \
    "build-tools/37.0.0" \
    "platforms/android-37.0" \
    && chown -R gradle:gradle "${ANDROID_HOME}"

FROM android-base AS android-sdk

USER gradle
WORKDIR /workspace/android

COPY --chown=gradle:gradle . .

ARG WNH_DEBUG_BASE_URL
ARG WNH_TRACKING_MIN_TIME_MS
ARG WNH_TRACKING_HTTP_TIMEOUT_MS

RUN --mount=type=cache,target=/home/gradle/.gradle,uid=1000,gid=1000 \
    --mount=type=cache,target=/home/gradle/.android,uid=1000,gid=1000 \
    gradle --no-daemon \
        "-PWNH_DEBUG_BASE_URL=${WNH_DEBUG_BASE_URL}" \
        "-PWNH_TRACKING_MIN_TIME_MS=${WNH_TRACKING_MIN_TIME_MS}" \
        "-PWNH_TRACKING_HTTP_TIMEOUT_MS=${WNH_TRACKING_HTTP_TIMEOUT_MS}" \
        testDebugUnitTest lintDebug assembleDebug

FROM android-base AS emulator

USER root

RUN android --no-metrics --sdk="${ANDROID_HOME}" sdk install \
    "emulator" \
    "system-images/android-37.0/google_apis_ps16k/x86_64" \
    && chown -R gradle:gradle "${ANDROID_HOME}"

RUN apt-get update \
    && apt-get install -y --no-install-recommends \
        libdbus-1-3 \
        libfontconfig1 \
        libgl1 \
        libnss3 \
        libpulse0 \
        libx11-6 \
        libxcomposite1 \
        libxcursor1 \
        libxi6 \
        libxkbfile1 \
        libxrandr2 \
        libxrender1 \
        libxtst6 \
    && rm -rf /var/lib/apt/lists/*

# The container is operated from the host through `docker exec ... adb`.
# Keep platform-tools in the emulator target without invalidating the large
# system-image layer when application sources change.
RUN android --no-metrics --sdk="${ANDROID_HOME}" sdk install "platform-tools" \
    && chown -R gradle:gradle "${ANDROID_HOME}"

USER gradle

RUN echo no | avdmanager create avd \
    --force \
    --name who_need_help_api37 \
    --package "system-images;android-37.0;google_apis_ps16k;x86_64"

COPY --from=android-sdk --chown=gradle:gradle \
    /workspace/android/app/build/outputs/apk/debug/app-debug.apk \
    /opt/who-need-help/who-need-help-debug.apk

CMD ["/opt/android-sdk/emulator/emulator", \
    "-avd", "who_need_help_api37", \
    "-no-window", \
    "-no-audio", \
    "-no-boot-anim", \
    "-no-snapshot", \
    "-gpu", "software", \
    "-feature", "-Vulkan", \
    "-camera-back", "none", \
    "-camera-front", "none", \
    "-netdelay", "none", \
    "-netspeed", "full"]

FROM scratch AS artifact

COPY --from=android-sdk \
    /workspace/android/app/build/outputs/apk/debug/app-debug.apk \
    /who-need-help-debug.apk
COPY --from=android-sdk \
    /workspace/android/app/build/reports/lint-results-debug.html \
    /lint-results-debug.html
