#!/bin/bash

# UTU GeoNode customisation script
#
# Usually this file does not need to be executed manually.
# 
# Execute update.sh that will pull latest changes from git
# and execute this script afterwards.
#
# If you modify files list please keep the custom css file
# first or file verification check might not give planned
# results. New files should be added at the bottom of the
# lists.
#
# This file is supposed to be more readable and simple
# than efficient and smart. Please keep it that way.
#
# softdev@utu.fi

# Directory to store the backups
BACKUPS='backups'

# Temporary direction for backup creation
TMP='tmp'

# Image files path
IMAGES='images'

# Image path inside container
CONTAINER_IMAGE_PATH='/usr/src/resilienceacademy/resilienceacademy/static/img'

# File names inside container
CONTAINER_FILES=(
    'geonode-utu.css'      #  0 (does not exist inside container on first run)
    'site_base.html'       #  1
    'index.html'           #  2
    'base.html'            #  3
    'urls.py'              #  4
    'training.html'        #  5
    'guide.html'           #  6
    'events.html'          #  7
    'utu_geonode.html'     #  8
    'influence.html'       #  9
    'contact.html'         # 10
    'blog.html'            # 11
    'utu-blog.js'          # 12
    )
   
# File paths inside container
CONTAINER_PATHS=(
    '/usr/src/resilienceacademy/resilienceacademy/static/css/'                #  0
    '/usr/src/resilienceacademy/resilienceacademy/templates/'                 #  1
    '/usr/src/resilienceacademy/resilienceacademy/templates/'                 #  2
    '/usr/src/resilienceacademy/resilienceacademy/templates/'                 #  3
    '/usr/local/lib/python2.7/site-packages/geonode/'                         #  4
    '/usr/src/resilienceacademy/resilienceacademy/templates/'                 #  5
    '/usr/src/resilienceacademy/resilienceacademy/templates/'                 #  6
    '/usr/src/resilienceacademy/resilienceacademy/templates/'                 #  7
    '/usr/src/resilienceacademy/resilienceacademy/templates/'                 #  8
    '/usr/src/resilienceacademy/resilienceacademy/templates/'                 #  9
    '/usr/src/resilienceacademy/resilienceacademy/templates/'                 # 10
    '/usr/src/resilienceacademy/resilienceacademy/templates/'                 # 11
    '/usr/src/resilienceacademy/resilienceacademy/static/js/'                 # 12
    )
  
# File names outside container (here)
# This is needed because there are files with same name on different path
LOCAL_FILES=(
    'geonode-utu.css'      #  0
    'site_base.html'       #  1
    'index.html'           #  2
    'base.html'            #  3
    'urls.py'              #  4
    'training.html'        #  5
    'guide.html'           #  6
    'events.html'          #  7
    'utu_geonode.html'     #  8
    'influence.html'       #  9
    'contact.html'         # 10
    'blog.html'            # 11
    'utu-blog.js'          # 12
  )

# Image files, these are not backed up but existence is checked
IMAGE_FILES=(
    'UTU_logo_white.png'
    'banner-2000x700px.jpg'
  )

# Get django container id
CONTAINER=$(docker ps -aqf "name=django4resilienceacademy")

# Exit if django container is not found
if [ -z "$CONTAINER" ]; then
    echo "No django container found. Halting script exection."
    exit 1
fi

# Create backups directory if it does not exist
if [ ! -d "$BACKUPS" ]; then
    mkdir "$BACKUPS"
fi

# Remove temp directory if it exists already
if [ -d "$TMP" ]; then
    echo "Temp directory $TMP already exists. Removing it before creating a new one."
    rm -rf "$TMP"
fi

# Create the temp directory
mkdir "$TMP"

# Copy all container files to local temp and ensure that file exists (exit if not)
for ((i = 0; i < ${#CONTAINER_FILES[@]};++i)); do
  
    # Copy file to temp directory
    docker cp $CONTAINER:${CONTAINER_PATHS[$i]}${CONTAINER_FILES[$i]} $TMP/${LOCAL_FILES[$i]}

    # 2019-12-16 olljal: Removed file existing check from here - new files added
  
done

# Create a zip file from backups
TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S")
zip -rq "$BACKUPS/utu-originals-$TIMESTAMP.zip" "$TMP"

# Check that the zip file is found
if [ ! -s "$BACKUPS/utu-originals-$TIMESTAMP.zip" ]; then
    echo "Created backup $BACKUPS/utu-originals-$TIMESTAMP.zip is missing! Halting script exection.."
    exit 1
fi

# Check that every customisation file exists locally and is not empty
for ((i = 0; i < ${#CONTAINER_FILES[@]};++i)); do
    if [ ! -s "${LOCAL_FILES[$i]}" ]; then
        echo "Required customisation file ${LOCAL_FILES[$i]} is empty or does not exist! Halting script exection."
        exit 1
    fi
done

# Check that every image file exists locally and is not empty
for ((i = 0; i < ${#IMAGE_FILES[@]};++i)); do
    if [ ! -s "$IMAGES/${IMAGE_FILES[$i]}" ]; then
        echo "Required image file ${IMAGE_FILES[$i]} is empty or does not exist! Halting script exection."
        exit 1
    fi
done

# Update container files
for ((i = 0; i < ${#CONTAINER_FILES[@]};++i)); do
    # Copy file to container
    docker cp ${LOCAL_FILES[$i]} $CONTAINER:${CONTAINER_PATHS[$i]}${CONTAINER_FILES[$i]}
done

# Update container images
for ((i = 0; i < ${#IMAGE_FILES[@]};++i)); do
    # Copy image to container
    docker cp $IMAGES/${IMAGE_FILES[$i]} $CONTAINER:${CONTAINER_IMAGE_PATH}/${IMAGE_FILES[$i]}
done

# Remove temp directory
rm -rf "$TMP"

# Run 'collectstatic' management command
docker exec -it $CONTAINER bash -c "/usr/src/resilienceacademy/manage.sh collectstatic --noinput"

# Restart django container to show customisation (test without)
# echo "Restarting django container, this will take some seconds"
# docker restart "$CONTAINER"

# Tell user that customisation is up to date
echo "Customisation update ready."

echo "Restart the django container if updates are not showing up:"
echo "docker restart \"$CONTAINER\""
