#!/bin/bash

IMAGE_NAME="fred-build/bulk-transfer"
REPO_BASE_PATH="$(git rev-parse --show-toplevel)"
BUILD_DIR="_build"
HOST_BUILD_PATH="$REPO_BASE_PATH/$BUILD_DIR"
DOCKER_REPO_BASE_PATH="/app_src"
DOCKER_BUILD_PATH="$DOCKER_REPO_BASE_PATH/$BUILD_DIR"

function build-image
{
    docker build -f "$REPO_BASE_PATH"/docker/ubuntu:20.04/Dockerfile -t "$IMAGE_NAME" "$REPO_BASE_PATH/docker/devel"
}

function build-app
{
    local build_type="${1:-Debug}"
    echo "Build: $build_type"
    [[ ! -d "$HOST_BUILD_PATH" ]] && mkdir "$HOST_BUILD_PATH"
    docker run -it --user "$(id -u):$(id -g)" \
               -v "$REPO_BASE_PATH":"$DOCKER_REPO_BASE_PATH" \
               -w "$DOCKER_BUILD_PATH" \
               --rm "$IMAGE_NAME" \
               /bin/bash -c "if [[ ! -f Makefile ]] ; then \
                    cmake -DCMAKE_BUILD_TYPE=$build_type $DOCKER_REPO_BASE_PATH ; \
                    fi && make -j$(($(grep "processor" /proc/cpuinfo | wc -l)/2))"
}

function build
{
    build-image
    build-app
}

function clean
{
    rm -rf "$HOST_BUILD_PATH"
}

function run
{
    local app="$1"; shift;
    local args="$@"

    docker run -it --user "$(id -u):$(id -g)" \
               -v "$REPO_BASE_PATH":"$DOCKER_REPO_BASE_PATH" \
               -w "$DOCKER_REPO_BASE_PATH" \
               --rm "$IMAGE_NAME" \
               sh -c "$app $args"
}

function run-gdb
{
    docker run --cap-add=SYS_PTRACE --security-opt seccomp=unconfined \
               -it --user "$(id -u):$(id -g)" \
               -v "$REPO_BASE_PATH":"$DOCKER_REPO_BASE_PATH" \
               -w "$DOCKER_REPO_BASE_PATH" \
               --rm "$IMAGE_NAME" \
               sh -c "gdb"
}


func="$1"; shift;
args="$@"

if [ ! "$func" ] ; then
    echo "Commands:"
    grep -E '^[[:space:]]*([[:alnum:]_]+[[:space:]]*\(\)|function[[:space:]]+[[:alnum:]_]+)' $0 | cut -d ' ' -f 2 | xargs -n 1 echo "  *"
fi

${func} ${args}
