#! /bin/bash
#composer create-project drupal-composer/drupal-project:8.x-dev ./ --no-interaction --no-install
#composer require drupal/adminimal_theme drupal/entity_clone drupal/entity_browser drupal/token drupal/admin_toolbar drupal/admin_toolbar_tools drupal/ctools drupal/debug_bar drupal/devel drupal/kint drupal/features drupal/features_ui drupal/admin_toolbar drupal/admin_toolbar_tools drupal/admin_toolbar_links_access_filter drupal/menu_admin_per_menu drupal/colorbox drupal/menu_item_extras drupal/admin_theme drupal/editor_advanced_link drupal/email_registration drupal/views_data_export drupal/views_infinite_scroll drupal/views_system drupal/csv_serialization drupal/page_manager drupal/mailsystem drupal/swiftmailer drupal/libraries drupal/pathauto drupal/redirect drupal/simplify_menu drupal/captcha drupal/honeypot drupal/recaptcha drupal/select2 drupal/simple_pass_reset drupal/rebuild_cache_access drupal/better_exposed_filters drupal/webform drupal/webform_ui drupal/webform_views drupal/multiselect  drupal/mailsystem drupal/swiftmailer drupal/token drupal/twig_tweak drupal/panels drupal/paragraphs drupal/role_delegation drupal/metatag drupal/metatag_views drupal/bootstrap  drupal/leaflet drupal/entity_clone
#module en beta ou rc
#composer require drupal/field_group:^3.0 drupal/geolocation:^3.0
#cp /shared/httpd/source_package/* / -R

function ask_yes_or_no() {
    read -p "$1 ([y]es or [N]o): "
    case $(echo $REPLY | tr '[A-Z]' '[a-z]') in
        y|yes) echo "yes" ;;
        *)     echo "no" ;;
    esac
}

CURDIR="$( cd "$(dirname "${BASH_SOURCE[0]}")" ; cd ..; pwd -P )"

if [[ ! -f "${CURDIR}/.already-initialized" ]]; then

  if [[ ! -f "${CURDIR}/.env" ]]; then
    cp "${CURDIR}/.env.dist" "${CURDIR}/.env"
    echo "DotEnv file created (${CURDIR}/.env)..."
    echo "Update project vars in ${CURDIR}/.env before continuing..."
  fi

  read -n 1 -s -r -p "Press any key to continue (after .env vars set)..."

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

  if [[ ! -f "${CURDIR}/.gitlab-ci.yml" ]]; then
    cp "${CURDIR}/.gitlab-ci.yml.dist" "${CURDIR}/.gitlab-ci.yml"
    echo "Gitlab CI config file created (${CURDIR}/.gitlab-ci.yml)..."
  fi

  if [[ -f "${CURDIR}/composer.lock" ]]; then
    rm "${CURDIR}/composer.lock"
  fi
  if [[ -f "${CURDIR}/package-lock.json" ]]; then
    rm "${CURDIR}/package-lock.json"
  fi
  echo "Lock files removed (${CURDIR}/[composer.lock|package-lock.json])..."

  GIT_REPO_URL=$(git config --get remote.origin.url)
  PACKAGE_VERSION=$(cat $CURDIR/VERSION)
  sed -i "s#drupal#${PROJECT_NAMESPACE:-objectifpapillon}-${PROJECT_NAME}#g" "${CURDIR}/package.json"
  sed -i "s#ssh://git@gitlab.com/objectifpapillon/tools/package-drupal.git#${GIT_REPO_URL}#g" "${CURDIR}/package.json"
  sed -i "s#drupal/recommended-project#${PROJECT_NAMESPACE:-objectifpapillon}/${PROJECT_NAME}#g" "${CURDIR}/composer.json"
  sed -i "s#Drupal 8 build#Drupal 9 from package-drupal v${PACKAGE_VERSION}#g" "${CURDIR}/package.json"
  echo "Package.json name / description / repository url updated..."

  export COMPOSER_MEMORY_LIMIT=-1
  composer install
  echo "Composer dependencies installed..."

  npm install
  echo "JS dependencies installed..."

  npm run build
  echo "Theme 1st build ok..."

  echo "parameters:
  http.response.debug_cacheability_headers: true
  twig.config:
    debug: true
    auto_reload: true
services:
  cache.backend.null:
    class: Drupal\Core\Cache\NullBackendFactory
" > "${CURDIR}/web/sites/development.services.yml"
  echo "development.services.yml ok..."

  echo "<?php
assert_options(ASSERT_ACTIVE, TRUE);
\Drupal\Component\Assertion\Handle::register();
\$settings['container_yamls'][] = DRUPAL_ROOT . '/sites/development.services.yml';
\$config['system.logging']['error_level'] = 'verbose';
\$config['system.performance']['css']['preprocess'] = FALSE;
\$config['system.performance']['js']['preprocess'] = FALSE;
\$settings['cache']['bins']['render'] = 'cache.backend.null';
// \$settings['cache']['bins']['discovery_migration'] = 'cache.backend.memory';
\$settings['cache']['bins']['page'] = 'cache.backend.null';
\$settings['cache']['bins']['dynamic_page_cache'] = 'cache.backend.null';
\$settings['rebuild_access'] = TRUE;
\$settings['skip_permissions_hardening'] = TRUE;
" > "${CURDIR}/web/sites/default/settings.local.php"
  echo "settings.local.php database ok..."

  echo "Please create database '${PROJECT_NAME}' before installing Drupal..."

  echo "Releasing..."
  # PACKAGE_VERSION=$(git ls-remote --tags --sort="v:refname" ssh://git@gitlab.com/objectifpapillon/tools/package-d8.git | tail -n1 | sed 's/.*\///; s/\^{}//')
  NEW_VERSION=0.1.0 && PACKAGE_VERSION=$(cat $CURDIR/VERSION) && echo "0.0.0" > "${CURDIR}/VERSION" && sed -i "s#${PACKAGE_VERSION}#0.0.0#g" "${CURDIR}/README.md" && release-it $NEW_VERSION --git.commitMessage="Release ${NEW_VERSION} (init from package-d8 version $PACKAGE_VERSION)" --no-git.push --no-git.requireCleanWorkingDir --git.addUntrackedFiles
  echo ""
  echo -e "\e[1m\e[32mTags ok, 1st commit made, please review before git push...\e[0m"

  echo 1 > "${CURDIR}/.already-initialized"

  if [[ "yes" == $(ask_yes_or_no "Install Drupal?") ]]; then
    while ! mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -h$MYSQL_HOSTNAME -e ";" ; do
      read -s -p "Can't connect to MySQL, please any key to retry..." testMysql
    done

    echo -e "\e[1m\e[32mINSTALL DRUPAL : You can run in devilbox...\e[1m\e[33m"
    drush9 si objectifpapillon --locale=fr --account-name=${DRUPAL_SUPER_ADMIN_NAME} --account-mail=${DRUPAL_SUPER_ADMIN_EMAIL} --account-pass=${DRUPAL_SUPER_ADMIN_PASSWORD} --site-name=${PROJECT_TITLE} --site-mail=${DRUPAL_SUPER_ADMIN_EMAIL}
    echo "\e[0m"
  else
    echo -e "\e[1m\e[32m
INSTALL DRUPAL : You can run in devilbox...\e[1m\e[33m
drush9 si objectifpapillon --locale=fr --account-name=${DRUPAL_SUPER_ADMIN_NAME} --account-mail=${DRUPAL_SUPER_ADMIN_EMAIL} --account-pass=${DRUPAL_SUPER_ADMIN_PASSWORD} --site-name=${PROJECT_TITLE} --site-mail=${DRUPAL_SUPER_ADMIN_EMAIL}
\e[0m"
  fi

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

  echo -e "\e[1m\e[31mProject already initialized !\e[0m"

  if [[ "yes" == $(ask_yes_or_no "Install Drupal?") ]]
  then
    echo -e "\e[1m\e[32m
INSTALL DRUPAL : You can run in devilbox...\e[1m\e[33m
drush9 si objectifpapillon --locale=fr --account-name=${DRUPAL_SUPER_ADMIN_NAME} --account-mail=${DRUPAL_SUPER_ADMIN_EMAIL} --account-pass=${DRUPAL_SUPER_ADMIN_PASSWORD} --site-name=${PROJECT_TITLE} --site-mail=${DRUPAL_SUPER_ADMIN_EMAIL}
\e[0m"
  fi

fi
