#!/usr/bin/env sh

# This file is using docker to run commands

# Detect docker can run
if ! which docker >/dev/null; then
  echo "Docker is not installed, please install docker first !"
  exit 1
fi
DOCKER_EXECUTABLE="docker"
# shellcheck disable=SC2046
if [ $(id -u) -ne 0 ]; then
    if ! docker info > /dev/null 2>&1; then
        if [ "$SPC_USE_SUDO" != "yes" ]; then
            echo "Docker command requires sudo"
            # shellcheck disable=SC2039
            echo -n 'To use sudo to run docker, run "export SPC_USE_SUDO=yes" and run command again'
            exit 1
        fi
        DOCKER_EXECUTABLE="sudo docker"
    fi
fi



# to check if qemu-docker run
if [ "$SPC_USE_ARCH" = "" ]; then
    SPC_USE_ARCH=x86_64
fi
case $SPC_USE_ARCH in
x86_64)
    ALPINE_FROM=alpine:edge
    ;;
aarch64)
    ALPINE_FROM=multiarch/alpine:aarch64-edge
    # shellcheck disable=SC2039
    echo -e "\e[033m* Using different arch needs to setup qemu-static for docker !\e[0m"
    $DOCKER_EXECUTABLE run --rm --privileged multiarch/qemu-user-static:register --reset > /dev/null
    ;;
*)
    echo "Current arch is not supported to run in docker: $SPC_USE_ARCH"
    exit 1
    ;;
esac

if [ "$SPC_USE_MIRROR" = "yes" ]; then
    SPC_USE_MIRROR="RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories"
else
    SPC_USE_MIRROR="RUN echo 'Using original repo'"
fi

# Detect docker env is setup
if ! $DOCKER_EXECUTABLE images | grep -q cwcc-spc-$SPC_USE_ARCH; then
    echo "Docker container does not exist. Building docker image ..."
    $DOCKER_EXECUTABLE build -t cwcc-spc-$SPC_USE_ARCH -f- . <<EOF
FROM $ALPINE_FROM
$SPC_USE_MIRROR
RUN apk update; \
    apk add --no-cache \
        autoconf \
        automake \
        gettext \
        bash \
        binutils \
        bison \
        build-base \
        cmake \
        curl \
        file \
        flex \
        g++ \
        gcc \
        git \
        jq \
        libgcc \
        libtool \
        libstdc++ \
        linux-headers \
        m4 \
        make \
        php82 \
        php82-common \
        php82-pcntl \
        php82-phar \
        php82-posix \
        php82-sodium \
        php82-tokenizer \
        php82-dom \
        php82-xml \
        php82-xmlwriter \
        composer \
        pkgconfig \
        wget \
        xz

WORKDIR /app
ADD ./src /app/src
COPY ./composer.* /app/
ADD ./bin /app/bin
RUN composer install --no-dev --classmap-authoritative
EOF
fi

# Check if in ci (local terminal can execute with -it)
if [ -t 0 ]; then
    INTERACT=-it
else
    INTERACT=''
fi

# Run docker
# shellcheck disable=SC2068
$DOCKER_EXECUTABLE run --rm $INTERACT -e SPC_FIX_DEPLOY_ROOT="$(pwd)" -v "$(pwd)"/config:/app/config -v "$(pwd)"/src:/app/src -v "$(pwd)"/buildroot:/app/buildroot -v "$(pwd)"/source:/app/source -v "$(pwd)"/downloads:/app/downloads cwcc-spc-$SPC_USE_ARCH bin/spc $@