#!/bin/sh

CONTAINER=$1

shift

REST_CMD=""

for value in "$@"; do
    if [ "$REST_CMD" != "" ]; then
        REST_CMD="$REST_CMD,"
    fi

    esc_value=$(echo "$value" | sed -e 's/\\/\\\\/g' -e 's/"/\\"/g')
    REST_CMD="$REST_CMD\"$esc_value\""
done

PROJECT_NAME="${CONTAINER%.workspace}"
WS_DIR="${WS_DIR:-"$HOME/.workspace"}"
DH=$(echo ${DOCKER_HOST:-"unix:///var/run/docker.sock"} | sed 's#unix://##')
LOG_FILE="$WS_DIR/ws.log"

write_log() {
    TIME=$(date +"%Y-%m-%d %H:%M:%S")
    printf '%s' "$2" | while IFS= read -r line || [ -n "$line" ]; do
        echo "[$TIME][cron][$PROJECT_NAME] $1: $line" >> "$LOG_FILE"
        echo "[$TIME][$PROJECT_NAME] $1: $line" >> /proc/1/fd/1
    done
}

EXEC_RESPONSE=$(curl --unix-socket "$DH" \
    -H "Accept: text/plain" \
    -H "Content-Type: application/json" \
    -d "{\"AttachStdin\":false,\"AttachStdout\":true,\"AttachStderr\":true,\"DetachKeys\":\"ctrl-p,ctrl-q\",\"Tty\":true,\"Cmd\":[$REST_CMD]}" \
    "http://localhost/containers/$CONTAINER/exec")

ID=$(echo $EXEC_RESPONSE | grep -Eo '"Id":"[^"]+"' | sed 's/.*"Id":"\([^"]*\).*/\1/')

if [ "$ID" = "" ]; then
    MESSAGE=$(echo $EXEC_RESPONSE | grep -Eo '"message":"[^"]+"' | sed 's/.*"message":"\([^"]*\).*/\1/')
    write_log 'error' "$MESSAGE"
    exit 1;
fi

EXEC_RESPONSE=$(curl --unix-socket "$DH" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d "{\"Tty\":true,\"Detach\":false}" \
    "http://localhost/exec/$ID/start")

write_log 'log' "$EXEC_RESPONSE"
