#! /bin/bash

source "$(dirname "${BASH_SOURCE[0]}")"/../use-env-vars.sh

    echo -e "\e[1m\e[32m
INIT PROJECT : Commands executed will be...\e[1m\e[33m
1. Create .env.local
2. Create files from .dist.*
3. Update package / composer json
4. Create settings.local.php
5. Release 1st tag
6. Update README
7. Push to gitlab.com and create dev branch
\e[0m"

# .env.local

echo -e "\e[1m\e[32m\n1. Create .env.local"
if [[ ! -f "${CURDIR}/.env.local" ]]; then
  echo -e "\n\e[0m"
  IFS= read -n1 -srp "Press ENTER to continue or SPACE to skip..." k <&1
  if [[ $k = "" ]] ; then
    echo -e "\e[1m\e[32m\nCommand running...\n\e[0m"
    cp "${CURDIR}/.dist.env.local" "${CURDIR}/.env.local"
    rm "${CURDIR}/.dist.env.local"
    echo "DotEnv file created (${CURDIR}/.env.local)..."
  else
    echo -e "\e[1m\e[31mSkipped...\n\e[0m"
  fi
else
  echo -e "\e[1m\e[31m\nFile already exists, skipped...\n\e[0m"
fi

echo -e "\e[1m\e[31m\nUpdate project vars in ${CURDIR}/.env.local before continuing...\nPress ENTER to continue...\e[0m"
while : ; do
  IFS= read -n1 -srp "" k <&1
  if [[ $k = "" ]] ; then
    break
  fi
done
source "$(dirname "${BASH_SOURCE[0]}")"/../use-env-vars.sh

# .gitlab-ci.yml / MD files

echo -e "\e[1m\e[32m\n2. Create files from .dist.*\n\e[0m"
IFS= read -n1 -srp "Press ENTER to continue or SPACE to skip..." k <&1
if [[ $k = "" ]] ; then
  echo -e "\e[1m\e[32m\nCommand running...\n\e[0m"
  cp "${CURDIR}/.dist.gitlab-ci.yml" "${CURDIR}/.gitlab-ci.yml"
  rm "${CURDIR}/.dist.gitlab-ci.yml"
  echo "gitlab-ci.yml file copied (${CURDIR}/.gitlab-ci.yml)..."
  cp "${CURDIR}/.dist.README.md" "${CURDIR}/README.md"
  rm "${CURDIR}/.dist.README.md"
  echo "README.md file copied (${CURDIR}/README.md)..."
  cp "${CURDIR}/.dist.CHANGELOG.md" "${CURDIR}/CHANGELOG.md"
  rm "${CURDIR}/.dist.CHANGELOG.md"
  echo "CHANGELOG.md file copied (${CURDIR}/CHANGELOG.md)..."
else
  echo -e "\e[1m\e[31mSkipped...\n\e[0m"
fi

# package / composer

echo -e "\e[1m\e[32m\n3. Update package / composer json\n\e[0m"
IFS= read -n1 -srp "Press ENTER to continue or SPACE to skip..." k <&1
if [[ $k = "" ]] ; then
  echo -e "\e[1m\e[32m\nCommand running...\n\e[0m"
  GIT_REPO_URL=$(git config --get remote.origin.url)
  PACKAGE_VERSION=$(cat $CURDIR/VERSION)
  sed -i "s#objectifpapillon/package-drupal#${PROJECT_NAMESPACE:-objectifpapillon}/${PROJECT_NAME}#g" "${CURDIR}/composer.json"
  sed -i "s#Project template for Drupal 9 projects#Drupal 9 from objectifpapillon/package-drupal v${PACKAGE_VERSION}#g" "${CURDIR}/composer.json"
  echo "Composer.json name / description / repository url updated..."
  sed -i "s#ssh://git@gitlab.com/objectifpapillon/tools/package-drupal.git#${GIT_REPO_URL}#g" "${CURDIR}/package.json"
  sed -i "s#drupal#${PROJECT_NAMESPACE:-objectifpapillon}-${PROJECT_NAME}#g" "${CURDIR}/package.json"
  sed -i "s#Project template for Drupal 9 projects#Drupal 9 from objectifpapillon/package-drupal v${PACKAGE_VERSION}#g" "${CURDIR}/package.json"
  echo "Package.json name / description / repository url updated..."
  if [[ -f "${CURDIR}/composer.lock" ]]; then
    rm "${CURDIR}/composer.lock"
    echo "composer.lock removed..."
  fi
  if [[ -f "${CURDIR}/package-lock.json" ]]; then
    rm "${CURDIR}/package-lock.json"
    echo "package-lock.json removed..."
  fi
else
  echo -e "\e[1m\e[31mSkipped...\n\e[0m"
fi

# Settings Drupal

echo -e "\e[1m\e[32m\n4. Create settings.local.php\n\e[0m"
IFS= read -n1 -srp "Press ENTER to continue or SPACE to skip..." k <&1
if [[ $k = "" ]] ; then
  echo -e "\e[1m\e[32m\nCommand running...\n\e[0m"
  echo "<?php
if (file_exists(\$app_root . '/' . \$site_path . '/settings.' . \$_ENV['APP_ENV'] . '.php')) {
  include \$app_root . '/' . \$site_path . '/settings.' . \$_ENV['APP_ENV'] . '.php';
}
" > "${CURDIR}/web/sites/default/settings.local.php"
  echo "settings.local.php database ok..."
else
  echo -e "\e[1m\e[31mSkipped...\n\e[0m"
fi

# Release

echo -e "\e[1m\e[32m\n5. Release 1st tag\n\e[0m"
IFS= read -n1 -srp "Press ENTER to continue or SPACE to skip..." k <&1
if [[ $k = "" ]] ; then
  echo -e "\e[1m\e[32m\nCommand running...\n\e[0m"
  NEW_VERSION="0.1.0"
  PACKAGE_VERSION="$(cat $CURDIR/VERSION)"
  echo "Releasing to ${NEW_VERSION} from package ${PACKAGE_VERSION}..."
  # PACKAGE_VERSION=$(git ls-remote --tags --sort="v:refname" ssh://git@gitlab.com/objectifpapillon/tools/package-d8.git | tail -n1 | sed 's/.*\///; s/\^{}//')
  echo "0.0.0" > "${CURDIR}/VERSION" && sed -i "s#${PACKAGE_VERSION}#0.0.0#g" "${CURDIR}/README.md" && release-it -VV --allow-same-version --increment=$NEW_VERSION --git.commitMessage="Release ${NEW_VERSION} (init from objectifpapillon/package-drupal version $PACKAGE_VERSION)" --no-git.push --no-git.requireCleanWorkingDir --no-git.requireUpstream --git.addUntrackedFiles
  echo ""
  echo -e "\e[1m\e[32mTags ok, 1st commit made, please review before git push...\e[0m"

else
  echo -e "\e[1m\e[31mSkipped...\n\e[0m"
fi

# 6. README

echo -e "\e[1m\e[32m\n6. Update README file\n\e[0m"
IFS= read -n1 -srp "Press ENTER to continue or SPACE to skip..." k <&1
if [[ $k = "" ]] ; then
  echo -e "\e[1m\e[32m\nCommand running...\n\e[0m"
  CURRENT_VERSION="$(cat $CURDIR/VERSION)"

  declare -A readme_vars
  readme_vars=(
      [%%TITLE%%]="$PROJECT_TITLE"
      [%%NAME%%]="$PROJECT_NAME"
      [%%PROJECT%%]="$([[ ! -z $PROJECT_NAMESPACE ]] && echo "$PROJECT_NAMESPACE/")$PROJECT_NAME"
      [%%PROJECT_BASE%%]="$PROJECT_NAME"
      [%%PROD_URL%%]="$PROJECT_PROD_URL"
      [%%DEMO_AUTH%%]="$PROJECT_DEMO_AUTH_USER / $PROJECT_DEMO_AUTH_PASSWORD"
      [%%DEMO_AUTH_USER%%]="$PROJECT_DEMO_AUTH_USER"
      [%%DEMO_AUTH_PASSWORD%%]="$PROJECT_DEMO_AUTH_PASSWORD"
      [%%CURRENT_VERSION%%]="$CURRENT_VERSION"
  )
  for i in "${!readme_vars[@]}"
  do
    search=$i
    replace=${readme_vars[$i]}
    echo "Replacing '${search}' by '${replace}'..."
    if [[ ! -z $replace ]]; then
      sed -i "s#${search}#${replace}#g" "${CURDIR}/README.md"
    fi
  done

  sed -i '/%%START/,/END%%/d' "${CURDIR}/README.md"

  git add README.md
  git commit -m 'Update README with vars'

  echo -e "\e[1m\e[32mREADME.md updated !\e[0m"
else
  echo -e "\e[1m\e[31m\nSkipped...\e[0m"
fi

# 7. Gitlab

echo -e "\e[1m\e[32m\n7. Push preprod/prod/dev branches\n\e[0m"
IFS= read -n1 -srp "Press ENTER to continue or SPACE to skip..." k <&1
if [[ $k = "" ]] ; then
  echo -e "\e[1m\e[32m\nCommand running...\n\e[0m"
  git checkout -b preprod
  git push -u origin preprod
  git checkout -b prod
  git push -u origin prod
  git checkout -b dev
  git push -u origin dev
else
  echo -e "\e[1m\e[31mSkipped...\n\e[0m"
fi

echo -e "\e[1m\e[32m
NEXT...\e[1m\e[33m
1. (inside devilbox) Run \e[32mcomposer install\e[33m from project root folder
2. (inside devilbox) Run \e[32mnpm run helpers:init:db\e[33m from project root folder to create database (with credentials set in .env.local)
2. Run \e[32mnpm install && npm run build\e[33m from project root folder
4. (inside devilbox) Run install command : \e[32mnpm run helpers:install:site\e[33m
5. Control website (go to ${FRONT_URL})
\e[0m"
