#!/usr/bin/env bash

# Configure shell.
set +x -e -u -o pipefail

# User-friendly print wrapper.
log() {
  printf '[%s] [%s] %s\n' "${0##*/}" "$( date '+%Y-%m-%dT%H:%M:%S' )" "${@}"
}

# ------------------------------------------------------------

log 'Making auth files'

# Generate .pypirc file
cat > .pypirc << EOF
[distutils]
index-servers =
	pypi-orch

[pypi-orch]
repository: https://pypi.theorchard.io/pypi/
username: ${PYPI_USERNAME}
password: ${PYPI_PASSWORD}
EOF

# Add the following to ~/.pip/pip.conf for pip
mkdir .pip
cat > .pip/pip.conf << EOF
[global]
index-url = https://${PYPI_USERNAME}:${PYPI_PASSWORD}@pypi.theorchard.io/pypi/
EOF

# Set creds for Poetry to publish with
cat > .poetrypypiorch << EOF
POETRY_HTTP_BASIC_PYPIORCH_USERNAME=${PYPI_USERNAME}
POETRY_HTTP_BASIC_PYPIORCH_PASSWORD=${PYPI_PASSWORD}
INDEX_URL=https://${PYPI_USERNAME}:${PYPI_PASSWORD}@pypi.theorchard.io/pypi/
EOF

# Set creds for uv to publish with
cat > .uvpypiorch << EOF
export UV_PUBLISH_URL=https://pypi.theorchard.io/pypi/
export UV_PUBLISH_USERNAME=${PYPI_USERNAME}
export UV_PUBLISH_PASSWORD=${PYPI_PASSWORD}
EOF

# ------------------------------------------------------------

log 'Choosing python version depending on the repository'

# Python version overrides.
if [[ "${GITREPO}" == 'garcon-contrib-pypi' ]]
then
  log 'Python version overridden to 3.11'
  export PYTHON_VERSION=3.11
fi

if [[ "${GITREPO}" == 'python-owslogger' ]]
then
  log 'Python version overridden to 3.9'
  export PYTHON_VERSION=3.9
fi

if [[ "${GITREPO}" == 'python-owsrequest' ]] || \
  [[ "${GITREPO}" == 'python-owsfeatures' ]]
then
  log 'Python version overridden to 3.11'
  export PYTHON_VERSION=3.11
fi

# ------------------------------------------------------------

log 'Generating Dockerfile'

cat docker/Dockerfile.tpl \
  | sed "s|{{PYTHON_VERSION}}|${PYTHON_VERSION}|g" \
  > docker/Dockerfile

# ------------------------------------------------------------

log 'Building Docker image'

docker build \
  --build-arg USER_ID=$( id -u ) \
  -t publish-pypi-package:local \
  docker

# ------------------------------------------------------------

log 'Launching Docker image'

docker run --rm \
  -e GITREPO="${GITREPO}" \
  -e TARGET_BRANCH="${TARGET_BRANCH}" \
  -e ROOT_DIRECTORY="${ROOT_DIRECTORY}" \
  -e VERSION="${VERSION}" \
  -e AWS_ACCESS_KEY_ID \
  -e AWS_SECRET_ACCESS_KEY \
  -e AWS_SESSION_TOKEN \
  -v '/var/lib/jenkins/.ssh/id_rsa:/home/appuser/.ssh/github' \
  -v "$( pwd )/.pypirc:/home/appuser/.pypirc" \
  -v "$( pwd )/.poetrypypiorch:/app/.poetrypypiorch" \
  -v "$( pwd )/.uvpypiorch:/app/.uvpypiorch" \
  -v "$( pwd )/.pip/pip.conf:/home/appuser/.pip/pip.conf" \
  -v "$( pwd )/../../sources:/app/sources" \
  publish-pypi-package:local
