#!/bin/bash
LOG=/tmp/sdk.log

APPLICATION="sdk/themes"
HTTP_STATUS=200
ERROR_MESSAGE="Unknown error"

create_theme() {
    if [ "$CONTENT_LENGTH" -gt 0 ]; then
        POST_DATA=$(cat -)
    fi
    APP_NAME=$(echo $POST_DATA | jq -r '.applicationName')
    THEME_NAME=$(echo $POST_DATA | jq -r '.themeName')
    FROM_THEME_NAME=$(echo $POST_DATA | jq -r '.fromThemeName')
    [[ $APP_NAME == "null" || $THEME_NAME == "null" || $FROM_THEME_NAME == "null" ]] && { HTTP_STATUS=400; ERROR_MESSAGE="Parameters applicationName, themeName and fromThemeName are required."; return 1; }
    echo "$APPLICATION: Creating theme '$THEME_NAME' from theme '$FROM_THEME_NAME' in application '$APP_NAME'" >> $LOG
    cd /home/$APP_NAME/html/assets/ || { HTTP_STATUS=500; ERROR_MESSAGE="Application $APP_NAME does not exist"; return 2; }
    cd /home/$APP_NAME/html/assets/themes/$THEME_NAME && { HTTP_STATUS=500; ERROR_MESSAGE="Theme '$THEME_NAME' already exist"; return 3; }
    if [ ! -d /home/$APP_NAME/html/assets/themes/default ]
    then
        echo "$APPLICATION: Creating default theme" >> $LOG
        mkdir -p themes/default
        mkdir -p themes/default/css
        mkdir -p themes/default/media
        ln -s themes/default/css /home/$APP_NAME/html/assets/themes.css || { HTTP_STATUS=500; ERROR_MESSAGE="Unable to create soft link"; return 4; }
        ln -s themes/default/media /home/$APP_NAME/html/assets/themes.media || { HTTP_STATUS=500; ERROR_MESSAGE="Unable to create soft link"; return 4; }
    fi
    cp -a /home/$APP_NAME/html/assets/themes/$FROM_THEME_NAME/ /home/$APP_NAME/html/assets/themes/$THEME_NAME/ || { HTTP_STATUS=500; ERROR_MESSAGE="Unable to create theme '$THEME_NAME' from theme '$FROM_THEME_NAME"; return 5; }
    return 0
}

delete_theme() {
    if [ "$CONTENT_LENGTH" -gt 0 ]; then
        POST_DATA=$(cat -)
    fi
    APP_NAME=$(echo $POST_DATA | jq -r '.applicationName')
    THEME_NAME=$(echo $POST_DATA | jq -r '.themeName')
    [[ -z $APP_NAME || -z $THEME_NAME ]] && { HTTP_STATUS=400; ERROR_MESSAGE="Parameters applicationName and themeName are required"; return 6; }
    echo "$APPLICATION: Deleting theme '$THEME_NAME' from application '$APP_NAME'" >> $LOG
    [[ $THEME_NAME == "default" ]] && { HTTP_STATUS=400; ERROR_MESSAGE="Theme 'default' can not be deleted"; return 7; }

    SOFT_LINK_TARGET=$(realpath /home/$APP_NAME/html/assets/themes.css)
    if [ $SOFT_LINK_TARGET == "" ];
    then
        CURRENT_THEME="default"
    else
        CURRENT_THEME=$(basename $(cd $SOFT_LINK_TARGET && cd ../ && pwd))
    fi
    if [[ $CURRENT_THEME == $THEME_NAME ]]
    then
        # remove current theme - make 'default' theme as current
        rm -rf /home/$APP_NAME/html/assets/themes.css
        rm -rf /home/$APP_NAME/html/assets/themes.media
        ln -s themes/default/css /home/$APP_NAME/html/assets/themes.css || { HTTP_STATUS=500; ERROR_MESSAGE="Unable to create soft link"; return 8; }
        ln -s themes/default/media /home/$APP_NAME/html/assets/themes.media || { HTTP_STATUS=500 ; ERROR_MESSAGE="Unable to create soft link"; return 8; }
    fi
    cd /home/$APP_NAME/html/assets/themes/$THEME_NAME || { HTTP_STATUS=500; ERROR_MESSAGE="Theme '$THEME_NAME' does not exist"; return 9; }
    rm -rf /home/$APP_NAME/html/assets/themes/$THEME_NAME || { HTTP_STATUS=500; ERROR_MESSAGE="Unable to delete theme '$THEME_NAME'"; return 10; }
    return 0
}

main() {
    if [ "$REQUEST_METHOD" = "POST" ]
    then
        create_theme
    elif [ "$REQUEST_METHOD" = "DELETE" ]
    then
        delete_theme
    fi
    STATUS_CODE=$?

    echo "Status: $HTTP_STATUS"
    echo "Content-type: application/json"
    echo ""
    if [ "$STATUS_CODE" -ne 0 ]
    then
        echo "{\"errorCode\": \"$STATUS_CODE\", \"errorMessage\": \"$ERROR_MESSAGE\"}"
    else
        echo "{\"status\": \"0\"}"
    fi
}
main