#! /usr/bin/env bash

#   COPYRIGHT NOTICE STARTS HERE

#   Copyright 2019 © Samsung Electronics Co., Ltd.
#
#   Licensed under the Apache License, Version 2.0 (the "License");
#   you may not use this file except in compliance with the License.
#   You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.

#   COPYRIGHT NOTICE ENDS HERE

SCRIPT_DIR=$(dirname "${0}")
LOCAL_PATH=$(readlink -f "$SCRIPT_DIR")
# main root dir in this git repo (relative to this script location)
ROOT_DIR=$(cd ${LOCAL_PATH}/../../../ && pwd)/
PROJECT_ROOT_IN_CONTAINER=${PWD##${ROOT_DIR}}
# Make dir structure same in container to make localhost ssh actions to match same dirs
CONTAINER_ROOT=${ROOT_DIR}

if [ "${PWD}" == "${PROJECT_ROOT_IN_CONTAINER}" ]; then
    echo "Please run it under subdir of ${ROOT_DIR} directory"
    exit 1
fi

env_params=(--env LOCALHOST_ANSIBLE_HOST=$(hostname -I | cut -f 1 -d ' '))
env_params+=(--env LOCALHOST_ANSIBLE_USER=$(id -nu))

if [ -e "${LOCAL_PATH}/.env" ]; then
    env_file="--env-file ${LOCAL_PATH}/.env"
fi

MOLECULE_IMAGE=${MOLECULE_IMAGE:-molecule-dev}
MOLECULE_IMAGE_VERSION=${MOLECULE_IMAGE_VERSION:-2.20.0}
echo "Running molecule image: ${MOLECULE_IMAGE}:${MOLECULE_IMAGE_VERSION}"
MOLECULE_CMD=${MOLECULE_CMD:-molecule}
docker run --rm -it \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v ${ROOT_DIR}:${CONTAINER_ROOT}:rw \
    -w ${CONTAINER_ROOT}/${PROJECT_ROOT_IN_CONTAINER} \
    "${env_params[@]}" \
    ${env_file} \
    --name ${MOLECULE_IMAGE} \
    ${MOLECULE_IMAGE}:${MOLECULE_IMAGE_VERSION} \
    ${MOLECULE_CMD} "$@"

