#!/bin/bash

if [ "$CIRCLECI" == "true" ]; then
  if [[ ! -z $CIRCLE_PULL_REQUEST ]] ; then
    CIRCLE_PR_NUMBER="${CIRCLE_PR_NUMBER:-${CIRCLE_PULL_REQUEST##*/}}"
    REPO=$CIRCLE_PULL_REQUEST
    REPO=${REPO##https://github.com/}
    REPO=${REPO%%/pull/$CIRCLE_PR_NUMBER}
  else
    REPO=$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME
  fi
  BRANCH=${CIRCLE_BRANCH:-$CIRCLE_TAG}
  PR_NUMBER=${CIRCLE_PR_NUMBER:-false}
elif [ "$TRAVIS" == "true" ]; then
  REPO=$TRAVIS_REPO_SLUG
  BRANCH=${TRAVIS_PULL_REQUEST_BRANCH:-$TRAVIS_BRANCH}
  PR_NUMBER=$TRAVIS_PULL_REQUEST
elif [ "$TF_BUILD" == "True" ]; then
  REPO=$BUILD_REPOSITORY_NAME
  BRANCH=${SYSTEM_PULLREQUEST_SOURCEBRANCH:-$BUILD_SOURCEBRANCHNAME}
  PR_NUMBER=${SYSTEM_PULLREQUEST_PULLREQUESTNUMBER:-false}
elif [[ -n $BUILD_NUMBER ]]; then
  echo "CHANGE_ID=$CHANGE_ID"
  echo "CHANGE_URL=$CHANGE_URL"
  REPO=${CHANGE_URL##https://github.com/}
  if [[ ! -z $CHANGE_ID ]] ; then
    REPO=${REPO%%/pull/$CHANGE_ID}
  fi
  PR_NUMBER=${CHANGE_ID:-false}
  BRANCH=$BRANCH_NAME
fi

REPOSITORY_OWNER=monicahq/monica

set -euo pipefail

# Update assets
echo -e "\033[1;32m# Build assets ...\033[0;37m"
echo -e "\033[1;36myarn run production\033[0;37m"
yarn run production
echo ""

# Check if there is zero update needed
status=$(git status --porcelain)
if [ "$status" = "" ]; then
  echo "Nothing to push, already up to date."
  exit 0;
fi
echo "Waiting modifications:"
echo $status

# Add files
git add public/mix-manifest.json
git add public/js/*
git add public/css/*
git add public/fonts/*

# Commit
if [ -z "${ASSETS_USERNAME:-}" ]; then
  #No username
  echo -e "\033[0;31mMonica asset are not up to date.\033[0;37m"
  echo "Please update the Monica assets yourself by running:"
  echo " ~ yarn run production"
  exit 2
fi
git config user.email $ASSETS_EMAIL
git config user.name $ASSETS_USERNAME
git commit -m "chore(assets): Update assets"

# Push
if [ "$BRANCH" == "main" ] && [ "$PR_NUMBER" == "false" ]; then
  echo -e "\033[0;31mmain branch is not up to date, but we can't update it directly...\033[0;37m"
  exit 0

elif [ -n "${ASSETS_GITHUB_TOKEN:-}" ]; then
  REPOS_VALUES=($(curl -H "Authorization: token $ASSETS_GITHUB_TOKEN" -sSL https://api.github.com/repos/$REPO/pulls/$PR_NUMBER | jq -r -c ".head.repo.full_name, .head.ref"))

  PULL_REQUEST_BRANCH=
  PULL_REQUEST_REPOSITORY=${REPOS_VALUES[0]}
  PULL_REQUEST_HEADBRANCH=${REPOS_VALUES[1]}

  if [ -z "${PULL_REQUEST_REPOSITORY:-}" ] || [ "$PULL_REQUEST_REPOSITORY" == "null" ]; then
    echo -e "\033[0;31mError with github api call\033[0;37m"
    exit 1
  elif [ "$PULL_REQUEST_REPOSITORY" == "$REPOSITORY_OWNER" ]; then
    PULL_REQUEST_BRANCH=$PULL_REQUEST_HEADBRANCH
  else
    echo -e "\033[0;31mMonica asset are not up to date.\033[0;37m"
    echo "We can't commit in $PULL_REQUEST_REPOSITORY to update them directly."
    echo "Please update the Monica assets yourself by running:"
    echo " ~ yarn run production"
    exit 2
  fi

  echo "Pushing files to $PULL_REQUEST_BRANCH branch ..."
  remote=monica-origin
  remoteurl="https://$ASSETS_USERNAME:$ASSETS_GITHUB_TOKEN@github.com/$REPO"
  git remote remove $remote || true
  git remote add -f $remote $remoteurl || true
  git push $remote HEAD:$PULL_REQUEST_BRANCH

  # Exit with error to stop the current build
  echo "...pushed files successfully."
  echo "Exit with error to stop the current build."
  exit -1
fi
