#!/bin/bash

# Licensed to the Apache Software Foundation (ASF) under one or more contributor
# license agreements; and to You under the Apache License, Version 2.0.

#
# use the command line interface to install standard actions deployed
# automatically
#
# To run this command
# ./installCatalog.sh <authkey> <edgehost> <dburl> <dbprefix> <apihost> <workers>

set -e
set -x

: ${OPENWHISK_HOME:?"OPENWHISK_HOME must be set and non-empty"}
WSK_CLI="$OPENWHISK_HOME/bin/wsk"

if [ $# -eq 0 ]; then
    echo "Usage: ./installCatalog.sh <authkey> <edgehost> <dburl> <dbprefix> <apihost> <workers>"
fi

AUTH="$1"
EDGEHOST="$2"
DB_URL="$3"
DB_NAME="${4}cloudanttrigger"
APIHOST="$5"
WORKERS="$6"
ACTION_RUNTIME_VERSION=${ACTION_RUNTIME_VERSION:="nodejs:6"}
INSTALL_FEED_ONLY=${INSTALL_FEED_ONLY:="false"}

# If the auth key file exists, read the key in the file. Otherwise, take the
# first argument as the key itself.
if [ -f "$AUTH" ]; then
    AUTH=`cat $AUTH`
fi

# Make sure that the EDGEHOST is not empty.
: ${EDGEHOST:?"EDGEHOST must be set and non-empty"}

# Make sure that the DB_URL is not empty.
: ${DB_URL:?"DB_URL must be set and non-empty"}

# Make sure that the DB_NAME is not empty.
: ${DB_NAME:?"DB_NAME must be set and non-empty"}

# Make sure that the APIHOST is not empty.
: ${APIHOST:?"APIHOST must be set and non-empty"}

PACKAGE_HOME="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

export WSK_CONFIG_FILE= # override local property file to avoid namespace clashes

echo Installing Cloudant package.

$WSK_CLI -i --apihost "$EDGEHOST" package update --auth "$AUTH" --shared yes cloudant \
    -a description "Cloudant database service" \
    -a parameters '[  {"name":"bluemixServiceName", "required":false, "bindTime":true}, {"name":"username", "required":false, "bindTime":true, "description": "Your Cloudant username"}, {"name":"password", "required":false, "type":"password", "bindTime":true, "description": "Your Cloudant password"}, {"name":"host", "required":true, "bindTime":true, "description": "This is usually your username.cloudant.com"}, {"name":"iamApiKey", "required":false}, {"name":"iamUrl", "required":false}, {"name":"dbname", "required":false, "description": "The name of your Cloudant database"}, {"name":"overwrite", "required":false, "type": "boolean"} ]' \
    -p bluemixServiceName 'cloudantNoSQLDB' \
    -p apihost "$APIHOST"

# make changesFeed.zip
cd actions/event-actions

if [ -e changesFeed.zip ]; then
    rm -rf changesFeed.zip
fi

cp -f changesFeed_package.json package.json
zip -r changesFeed.zip lib package.json changes.js

$WSK_CLI -i --apihost "$EDGEHOST" action update --kind "$ACTION_RUNTIME_VERSION" --auth "$AUTH" cloudant/changes "$PACKAGE_HOME/actions/event-actions/changesFeed.zip" \
    -t 90000 \
    -a feed true \
    -a description 'Database change feed' \
    -a parameters '[ {"name":"dbname", "required":true, "updatable":false}, {"name":"iamApiKey", "required":false, "updatable":false}, {"name":"iamUrl", "required":false, "updatable":false}, {"name": "filter", "required":false, "updatable":true, "type": "string", "description": "The name of your Cloudant database filter"}, {"name": "query_params", "required":false, "updatable":true, "description": "JSON Object containing query parameters that are passed to the filter"} ]' \
    -a sampleInput '{ "dbname": "mydb", "filter": "mailbox/by_status", "query_params": {"status": "new"} }'

COMMAND=" -i --apihost $EDGEHOST package update --auth $AUTH --shared no cloudantWeb \
     -p DB_URL $DB_URL \
     -p DB_NAME $DB_NAME \
     -p apihost $APIHOST"

if [ -n "$WORKERS" ]; then
    COMMAND+=" -p workers $WORKERS"
fi

$WSK_CLI $COMMAND

# make changesWebAction.zip
cp -f changesWeb_package.json package.json
npm install

if [ -e changesWebAction.zip ]; then
    rm -rf changesWebAction.zip
fi

zip -r changesWebAction.zip lib package.json changesWebAction.js node_modules

$WSK_CLI -i --apihost "$EDGEHOST" action update --kind "$ACTION_RUNTIME_VERSION" --auth "$AUTH" cloudantWeb/changesWebAction "$PACKAGE_HOME/actions/event-actions/changesWebAction.zip" \
    -a description 'Create/Delete a trigger in cloudant provider Database' \
    --web true

if [ $INSTALL_FEED_ONLY == "false" ]; then
    # Cloudant account actions

    $WSK_CLI -i --apihost "$EDGEHOST" action update --kind "$ACTION_RUNTIME_VERSION" --auth "$AUTH" cloudant/create-database \
        "$PACKAGE_HOME/actions/account-actions/create-database.js" \
        -a description 'Create Cloudant database' \
        -a parameters '[ {"name":"dbname", "required":true} ]'

    $WSK_CLI -i --apihost "$EDGEHOST" action update --kind "$ACTION_RUNTIME_VERSION" --auth "$AUTH" cloudant/read-database \
        "$PACKAGE_HOME/actions/account-actions/read-database.js" \
        -a description 'Read Cloudant database' \
        -a parameters '[ {"name":"dbname", "required":true} ]'

    $WSK_CLI -i --apihost "$EDGEHOST" action update --kind "$ACTION_RUNTIME_VERSION" --auth "$AUTH" cloudant/delete-database \
        "$PACKAGE_HOME/actions/account-actions/delete-database.js" \
        -a description 'Delete Cloudant database' \
        -a parameters '[ {"name":"dbname", "required":true} ]'

    $WSK_CLI -i --apihost "$EDGEHOST" action update --kind "$ACTION_RUNTIME_VERSION" --auth "$AUTH" cloudant/list-all-databases \
        "$PACKAGE_HOME/actions/account-actions/list-all-databases.js" \
        -a description 'List all Cloudant databases'

    $WSK_CLI -i --apihost "$EDGEHOST" action update --kind "$ACTION_RUNTIME_VERSION" --auth "$AUTH" cloudant/read-updates-feed \
        "$PACKAGE_HOME/actions/account-actions/read-updates-feed.js" \
        -a description 'Read updates feed from Cloudant account (non-continuous)' \
        -a parameters '[ {"name":"dbname", "required":true}, {"name":"params", "required":false} ]'

    # Cloudant database actions

    $WSK_CLI -i --apihost "$EDGEHOST" action update --kind "$ACTION_RUNTIME_VERSION" --auth "$AUTH" cloudant/create-document \
        "$PACKAGE_HOME/actions/database-actions/create-document.js" \
        -a description 'Create document in database' \
        -a parameters '[ {"name":"dbname", "required":true}, {"name":"doc", "required":true, "description": "The JSON document to insert"}, {"name":"params", "required":false} ]' \

    $WSK_CLI -i --apihost "$EDGEHOST" action update --kind "$ACTION_RUNTIME_VERSION" --auth "$AUTH" cloudant/read \
        "$PACKAGE_HOME/actions/database-actions/read-document.js" \
        -a description 'Read document from database' \
        -a parameters '[ {"name":"dbname", "required":true}, {"name":"id", "required":true, "description": "The Cloudant document id to fetch"}, {"name":"params", "required":false}]' \
        -p id ''

    $WSK_CLI -i --apihost "$EDGEHOST" action update --kind "$ACTION_RUNTIME_VERSION" --auth "$AUTH" cloudant/read-document \
        "$PACKAGE_HOME/actions/database-actions/read-document.js" \
        -a description 'Read document from database' \
        -a parameters '[ {"name":"dbname", "required":true}, {"name":"docid", "required":true, "description": "The Cloudant document id to fetch"}, {"name":"params", "required":false}]' \
        -p docid ''

    $WSK_CLI -i --apihost "$EDGEHOST" action update --kind "$ACTION_RUNTIME_VERSION" --auth "$AUTH" cloudant/write \
        "$PACKAGE_HOME/actions/database-actions/write-document.js" \
        -a description 'Write document in database' \
        -a parameters '[ {"name":"dbname", "required":true}, {"name":"doc", "required":true} ]' \
        -p doc '{}'

    $WSK_CLI -i --apihost "$EDGEHOST" action update --kind "$ACTION_RUNTIME_VERSION" --auth "$AUTH" cloudant/update-document \
        "$PACKAGE_HOME/actions/database-actions/update-document.js" \
        -a description 'Update document in database' \
        -a parameters '[ {"name":"dbname", "required":true}, {"name":"doc", "required":true}, {"name":"params", "required":false} ]' \
        -p doc '{}'

    $WSK_CLI -i --apihost "$EDGEHOST" action update --kind "$ACTION_RUNTIME_VERSION" --auth "$AUTH" cloudant/delete-document \
        "$PACKAGE_HOME/actions/database-actions/delete-document.js" \
        -a description 'Delete document from database' \
        -a parameters '[ {"name":"dbname", "required":true}, {"name":"docid", "required":true, "description": "The Cloudant document id to delete"},  {"name":"docrev", "required":true, "description": "The document revision number"} ]' \
        -p docid '' \
        -p docrev ''

    $WSK_CLI -i --apihost "$EDGEHOST" action update --kind "$ACTION_RUNTIME_VERSION" --auth "$AUTH" cloudant/list-documents \
        "$PACKAGE_HOME/actions/database-actions/list-documents.js" \
        -a description 'List all docs from database' \
        -a parameters '[ {"name":"dbname", "required":true}, {"name":"params", "required":false} ]'

    $WSK_CLI -i --apihost "$EDGEHOST" action update --kind "$ACTION_RUNTIME_VERSION" --auth "$AUTH" cloudant/list-design-documents \
        "$PACKAGE_HOME/actions/database-actions/list-design-documents.js" \
        -a description 'List design documents from database' \
        -a parameters '[ {"name":"dbname", "required":true}, {"name":"includedocs", "required":false} ]' \

    $WSK_CLI -i --apihost "$EDGEHOST" action update --kind "$ACTION_RUNTIME_VERSION" --auth "$AUTH" cloudant/create-query-index \
        "$PACKAGE_HOME/actions/database-actions/create-query-index.js" \
        -a description 'Create a Cloudant Query index into database' \
        -a parameters '[ {"name":"dbname", "required":true}, {"name":"index", "required":true} ]' \
        -p index ''

    $WSK_CLI -i --apihost "$EDGEHOST" action update --kind "$ACTION_RUNTIME_VERSION" --auth "$AUTH" cloudant/list-query-indexes \
        "$PACKAGE_HOME/actions/database-actions/list-query-indexes.js" \
        -a description 'List Cloudant Query indexes from database' \
        -a parameters '[ {"name":"dbname", "required":true} ]' \

    $WSK_CLI -i --apihost "$EDGEHOST" action update --kind "$ACTION_RUNTIME_VERSION" --auth "$AUTH" cloudant/exec-query-find \
        "$PACKAGE_HOME/actions/database-actions/exec-query-find.js" \
        -a description 'Execute query against Cloudant Query index' \
        -a parameters '[ {"name":"dbname", "required":true}, {"name":"query", "required":true} ]' \
        -p query ''

    $WSK_CLI -i --apihost "$EDGEHOST" action update --kind "$ACTION_RUNTIME_VERSION" --auth "$AUTH" cloudant/exec-query-search \
        "$PACKAGE_HOME/actions/database-actions/exec-query-search.js" \
        -a description 'Execute query against Cloudant search' \
        -a parameters '[ {"name":"dbname", "required":true}, {"name":"docid", "required":true}, {"name":"indexname", "required":true}, {"name":"search", "required":true} ]' \
        -p docid '' \
        -p indexname '' \
        -p search ''

    $WSK_CLI -i --apihost "$EDGEHOST" action update --kind "$ACTION_RUNTIME_VERSION" --auth "$AUTH" cloudant/exec-query-view \
        "$PACKAGE_HOME/actions/database-actions/exec-query-view.js" \
        -a description 'Call view in design document from database' \
        -a parameters '[ {"name":"dbname", "required":true}, {"name":"docid", "required":true}, {"name":"viewname", "required":true}, {"name":"params", "required":false} ]' \
        -p docid '' \
        -p viewname ''

    $WSK_CLI -i --apihost "$EDGEHOST" action update --kind "$ACTION_RUNTIME_VERSION" --auth "$AUTH" cloudant/manage-bulk-documents \
        "$PACKAGE_HOME/actions/database-actions/manage-bulk-documents.js" \
        -a description 'Create, Update, and Delete documents in bulk' \
        -a parameters '[ {"name":"dbname", "required":true}, {"name":"docs", "required":true}, {"name":"params", "required":false} ]' \
        -p docs '{}'

    $WSK_CLI -i --apihost "$EDGEHOST" action update --kind "$ACTION_RUNTIME_VERSION" --auth "$AUTH" cloudant/delete-view \
        "$PACKAGE_HOME/actions/database-actions/delete-view.js" \
        -a description 'Delete view from design document' \
        -a parameters '[ {"name":"dbname", "required":true}, {"name":"docid", "required":true}, {"name":"viewname", "required":true}, {"name":"params", "required":false} ]' \
        -p docid '' \
        -p viewname ''

    $WSK_CLI -i --apihost "$EDGEHOST" action update --kind "$ACTION_RUNTIME_VERSION" --auth "$AUTH" cloudant/delete-query-index \
        "$PACKAGE_HOME/actions/database-actions/delete-query-index.js" \
        -a description 'Delete index from design document' \
        -a parameters '[ {"name":"dbname", "required":true}, {"name":"docid", "required":true}, {"name":"indexname", "required":true}, {"name":"params", "required":false} ]' \
        -p docid '' \
        -p indexname ''

    $WSK_CLI -i --apihost "$EDGEHOST" action update --kind "$ACTION_RUNTIME_VERSION" --auth "$AUTH" cloudant/read-changes-feed \
        "$PACKAGE_HOME/actions/database-actions/read-changes-feed.js" \
        -a description 'Read Cloudant database changes feed (non-continuous)' \
        -a parameters '[ {"name":"dbname", "required":true}, {"name":"params", "required":false} ]'

    $WSK_CLI -i --apihost "$EDGEHOST" action update --kind "$ACTION_RUNTIME_VERSION" --auth "$AUTH" cloudant/create-attachment \
        "$PACKAGE_HOME/actions/database-actions/create-update-attachment.js" \
        -a description 'Create document attachment in database' \
        -a parameters '[ {"name":"dbname", "required":true}, {"name":"docid", "required":true}, {"name":"docrev", "required":true}, {"name":"attachment", "required":true}, {"name":"attachmentname", "required":true}, {"name":"contenttype", "required":true}, {"name":"params", "required":false} ]' \
        -p docid '' \
        -p docrev '' \
        -p attachment '{}' \
        -p attachmentname '' \
        -p contenttype ''

    $WSK_CLI -i --apihost "$EDGEHOST" action update --kind "$ACTION_RUNTIME_VERSION" --auth "$AUTH" cloudant/read-attachment \
        "$PACKAGE_HOME/actions/database-actions/read-attachment.js" \
        -a description 'Read document attachment from database' \
        -a parameters '[ {"name":"dbname", "required":true}, {"name":"docid", "required":true}, {"name":"attachmentname", "required":true}, {"name":"params", "required":false} ]' \
        -p docid '' \
        -p attachmentname ''

    $WSK_CLI -i --apihost "$EDGEHOST" action update --kind "$ACTION_RUNTIME_VERSION" --auth "$AUTH" cloudant/update-attachment \
        "$PACKAGE_HOME/actions/database-actions/create-update-attachment.js" \
        -a description 'Update document attachment in database' \
        -a parameters '[ {"name":"dbname", "required":true}, {"name":"docid", "required":true}, {"name":"docrev", "required":true}, {"name":"attachment", "required":true}, {"name":"attachmentname", "required":true}, {"name":"contenttype", "required":true}, {"name":"params", "required":false} ]' \
        -p docid '' \
        -p docrev '' \
        -p attachment '{}' \
        -p attachmentname '' \
        -p contenttype ''

    $WSK_CLI -i --apihost "$EDGEHOST" action update --kind "$ACTION_RUNTIME_VERSION" --auth "$AUTH" cloudant/delete-attachment \
        "$PACKAGE_HOME/actions/database-actions/delete-attachment.js" \
        -a description 'Delete document attachment from database' \
        -a parameters '[ {"name":"dbname", "required":true}, {"name":"docid", "required":true}, {"name":"docrev", "required":true}, {"name":"attachmentname", "required":true}, {"name":"params", "required":false} ]' \
        -p docid '' \
        -p docrev '' \
        -p attachmentname ''
fi
