#!/bin/bash
BASE_URL=${1:-magento2.test}

bin/stop

# get rid of vertex/module-tax, not required and causes checksum errors on composer install
# https://github.com/markshust/docker-magento/issues/135
# prevent double or more insertion
if ! grep -qF '"replace": { "vertex/module-tax": "*" }' src/composer.json; then
    sed -e 's/"conflict": {/"replace": { "vertex\/module-tax": "*" },\ "conflict": {/' src/composer.json > composer.json && mv composer.json src/composer.json
fi

docker-compose -f docker-compose.yml up -d
sleep 1 #Ensure containers are started...

echo "Copying all files from host to container..."
rm -rf src/vendor #Clear for step below
bin/copytocontainer --all

bin/clinotty chmod u+x bin/magento

if hash composer 2>/dev/null; then
    PUBLIC_KEY="$(composer config -gl | grep '\[http-basic.repo.magento.com.username\]' | cut -c40-)"
    PRIVATE_KEY="$(composer config -gl | grep '\[http-basic.repo.magento.com.password\]' | cut -c40-)"
fi

if [ -z "$PUBLIC_KEY" ] || [ -z "$PRIVATE_KEY" ]; then
    exec < /dev/tty
    echo
    echo
    echo "    Authentication required (repo.magento.com, public_key and private_key):"
    read -p "        Username: " PUBLIC_KEY
    read -p "        Password: " PRIVATE_KEY
    echo
    if [ -n "$PUBLIC_KEY" ] && [ -n "$PRIVATE_KEY" ] && hash composer 2>/dev/null; then
        read -p "    Add authentication information to host composer config? y/n: " ADD_AUTH
        echo
        if [[ $ADD_AUTH =~ ^[Yy]$ ]]; then
            composer global config http-basic.repo.magento.com $PUBLIC_KEY $PRIVATE_KEY
        fi
        ADD_AUTH=''
    fi
    exec <&-
fi

if [ -n "$PUBLIC_KEY" ] && [ -n "$PRIVATE_KEY" ]; then
    bin/clinotty composer config http-basic.repo.magento.com $PUBLIC_KEY $PRIVATE_KEY
    PUBLIC_KEY=''
    PRIVATE_KEY=''
fi

echo "Forcing reinstall of composer deps to ensure perms & reqs..."
bin/clinotty composer install

bin/clinotty bin/magento setup:install \
  --db-host=db \
  --db-name=magento \
  --db-user=magento \
  --db-password=magento \
  --base-url=https://$BASE_URL/ \
  --admin-firstname=John \
  --admin-lastname=Smith \
  --admin-email=john.smith@gmail.com \
  --admin-user=john.smith \
  --admin-password=password123 \
  --language=en_US \
  --currency=USD \
  --timezone=America/New_York \
  --use-rewrites=1

echo "Turning on developer mode.."
bin/clinotty bin/magento deploy:mode:set developer

bin/clinotty bin/magento indexer:reindex

echo "Forcing deploy of static content to speed up initial requests..."
bin/clinotty bin/magento setup:static-content:deploy -f 

echo "Enabling Redis for cache..."
bin/clinotty bin/magento setup:config:set --no-interaction --cache-backend=redis --cache-backend-redis-server=redis --cache-backend-redis-db=0

echo "Enabling Redis for Full Page Cache..."
bin/clinotty bin/magento setup:config:set --no-interaction  --page-cache=redis --page-cache-redis-server=redis --page-cache-redis-db=1

echo "Enabling Redis for session..."
bin/clinotty bin/magento setup:config:set --no-interaction --session-save=redis --session-save-redis-host=redis --session-save-redis-log-level=4 --session-save-redis-db=2

echo "Clearing the cache for good measure..."
bin/clinotty bin/magento cache:flush

echo "Copying files from container to host after install..."
bin/copyfromcontainer app
bin/copyfromcontainer vendor

echo "Restarting containers with host bind mounts for dev..."
bin/restart

echo "Docker development environment setup complete."
echo "You may now access your Magento instance at https://${BASE_URL}/"