#!/bin/bash
set -eu

# Source YunoHost helpers
source /usr/share/yunohost/helpers

# Retrieve arguments
domain=$YNH_APP_ARG_DOMAIN
path=$YNH_APP_ARG_PATH
is_public=$YNH_APP_ARG_IS_PUBLIC
app=ihatemoney

# Source local utils
source _common.sh

path=$(ynh_normalize_url_path $path)

# Database settings
db_pwd=$(ynh_string_random)
db_name=$app
db_user=$app

# Constant arguments
db_user=ihatemoney
secret_key=`openssl rand -base64 32`
mails_sender="no-reply@${domain}"

sudo yunohost app checkurl $domain$path -a ihatemoney
if [[ ! $? -eq 0 ]]; then
  ynh_die "${domain}${path} is not available"
fi


# Configure database
ynh_mysql_create_db "$db_name" "$db_user" "$db_pwd"
ynh_app_setting_set $app mysqlpwd $db_pwd

# Delete db, user dirs and conf if exit with an error
# inspired from https://github.com/Kloadut/owncloud_ynh/blob/master/scripts/install#L37

function exit_properly
{
    set +e
    ynh_mysql_drop_db $db_name
    ynh_mysql_drop_user $db_user
    sudo userdel ihatemoney
    sudo rm -Rf /opt/yunohost/ihatemoney
    sudo rm -Rf /etc/ihatemoney
    sudo rm /etc/nginx/conf.d/$domain.d/ihatemoney.conf
    sudo rm /etc/supervisor/conf.d/ihatemoney.conf
    ynh_die "Install script failed, aborted and rolled back the installation"
}
trap exit_properly ERR

# Save app settings
ynh_app_setting_set $app domain $domain
ynh_app_setting_set $app is_public "$is_public"

install_apt_dependencies

create_unix_user

# Install source
fetch_and_extract /opt/yunohost/ihatemoney/src/ ihatemoney

# Prepare venv
sudo virtualenv /opt/yunohost/ihatemoney/venv
sudo /opt/yunohost/ihatemoney/venv/bin/pip install -r /opt/yunohost/ihatemoney/src/requirements.txt
sudo /opt/yunohost/ihatemoney/venv/bin/pip install gunicorn>=19.3.0 MySQL-python

# Fix permissions
fix_permissions /opt/yunohost/ihatemoney/src

create_system_dirs

# Configure gunicorn
sudo install -o ihatemoney -g ihatemoney -m 644 \
     ../conf/gunicorn.conf.py /etc/ihatemoney/gunicorn.conf.py

# Configure supervisor
sudo install -o root -g root -m 644 \
     ../conf/supervisord.conf /etc/supervisor/conf.d/ihatemoney.conf
sudo yunohost service add supervisor

# Configure ihatemoney
sed -i "s@MY_SECRET_KEY@$secret_key@" ../conf/ihatemoney.cfg
sed -i "s/MY_EMAIL/$mails_sender/" ../conf/ihatemoney.cfg
sed -i "s@MY_MYSQL_PW@$db_pwd@" ../conf/ihatemoney.cfg
sed -i "s@MY_PATH@$path@" ../conf/ihatemoney.cfg
# Remove the conf directive if served at root
sed -i "/APPLICATION_ROOT='\/'/d" ../conf/ihatemoney.cfg
sudo install -o ihatemoney -g ihatemoney -m 640 \
     ../conf/ihatemoney.cfg /etc/ihatemoney/ihatemoney.cfg

# If app is public, add url to SSOWat conf as skipped_uris
if [[ "$is_public" -ne 0 ]];
then
    ynh_app_setting_set $app unprotected_uris "/"
fi

# Configure Nginx and reload
sed -i "s@PATHTOCHANGE@$path@g" ../conf/nginx.conf
# Fix double-slash for domain-root install
sed -i "s@location //@location /@" ../conf/nginx.conf

sudo install -o root -g root -m644 \
     ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/ihatemoney.conf

# Start backend
sudo service supervisor restart

# Reconfigure sso
sudo yunohost app ssowatconf

# Wait that gunicorn is ready to consider the install finished, that is to
# avoid HTTP 502 right after installation
for i in `seq 1 120`
do
    test -S /tmp/budget.gunicorn.sock && break
	sleep 1
done

sudo service nginx reload