#!/bin/bash

LOG=/tmp/sdk.log
application="sdk/file/link"

HTTP_STATUS=200
ERROR_MESSAGE="Unknown error"

#
# NAME
#	file/link
#
# SYNOPSIS
#	file/link
#
#	where:
#
#
# DESCRIPTION
#
# RETURNS
#	0	Files linked OK
#	1	Invalid parameters
#	2	Target application does not exist
#	3	Could not create soft link parent dir
#	4	Could not create soft link
#
# VERSION
#	1.0	2021-5-19	Initial release
#

link_media() {
    if [ "$CONTENT_LENGTH" -gt 0 ]; then
        POST_DATA=$(cat -)
    fi
    SOURCE_APP=$(echo $POST_DATA | jq -r '.sourceApp')
    TARGET_APP=$(echo $POST_DATA | jq -r '.targetApp')
    SOURCE_PATH=$(echo $POST_DATA | jq -r '.sourcePath')
    TARGET_PATH=$(echo $POST_DATA | jq -r '.targetPath')
    [[ $SOURCE_PATH == "null" || $TARGET_PATH == "null" || $SOURCE_APP == "null" || $TARGET_APP == "null" ]] && { HTTP_STATUS=400; ERROR_MESSAGE="Parameters sourceApp, targetApp, sourcePath, targetPath are required."; return 1; }

    echo "$APPLICATION: Linking file '$SOURCE_PATH' from app '$SOURCE_APP' to '$TARGET_PATH' from app '$TARGET_APP'" >> $LOG

    TARGET="/home/$TARGET_APP/html/assets/$TARGET_PATH"
    if [ "$SOURCE_APP" = "$TARGET_APP" ]
    then
        SOURCE="../../../$SOURCE_PATH"
    else
        SOURCE="../../../../../../$SOURCE_APP/html/assets/$SOURCE_PATH"
    fi
    rm -rf $TARGET

    echo "$APPLICATION: TARGET '$TARGET' SOURCE '$SOURCE'" >> $LOG

    parentdir="$(dirname "$TARGET")"
    mkdir -p $parentdir || { HTTP_STATUS=500; ERROR_MESSAGE="Unable to create soft link parent dir"; return 3; }
    ln -sf $SOURCE $TARGET || { HTTP_STATUS=500; ERROR_MESSAGE="Unable to create soft link"; return 4; }
    
    return 0
}


main() {
    if [ "$REQUEST_METHOD" = "POST" ]
    then
        link_media
    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