<%
/*
 * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
 *
 * WSO2 Inc. licenses this file to you under the Apache License,
 * Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 * either express or implied. See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

var log = new Log("api/data-tables-invoker-api.jag");

var uri = request.getRequestURI();
var uriMatcher = new URIMatcher(String(uri));

var devicemgtProps = require("/app/modules/conf-reader/main.js")["conf"];
var serviceInvokers = require("/app/modules/oauth/token-protected-service-invokers.js")["invokers"];
var utility = require("/app/modules/utility.js")["utility"];

function appendQueryParam (url, queryParam , value) {
    if (url.indexOf("?") > 0) {
        return url + "&" + queryParam + "=" + value;
    }
    return url + "?" + queryParam + "=" + value;
}

if (uriMatcher.match("/{context}/api/data-tables/invoker")) {
    var url = request.getParameter("url");
    var targetURL = devicemgtProps["httpsURL"] + request.getParameter("url");
    //noinspection JSUnresolvedFunction getAllParameters
    var allParams = request.getAllParameters();

    for (var allParamsKey in allParams) {
        if (allParams.hasOwnProperty(allParamsKey)) {
            if (allParamsKey == "limit" || allParamsKey == "offset") {
                targetURL = appendQueryParam(targetURL, allParamsKey, allParams[allParamsKey]);
            } else if (allParamsKey == "filter") {
                if (allParams[allParamsKey]) {
                    var searchPayload = JSON.parse(allParams[allParamsKey]);
                    for (var searchPayloadKey in searchPayload) {
                        if (searchPayload.hasOwnProperty(searchPayloadKey)) {
                            targetURL = appendQueryParam(targetURL, searchPayloadKey, searchPayload[searchPayloadKey]);
                        }
                    }
                }
            }
        }
    }

    serviceInvokers.XMLHttp.get(
            targetURL,
            // response callback
            function (backendResponse) {
                response["status"] = backendResponse["status"];
                response["content"] =  utility.encodeJson(backendResponse["responseText"]);
                response["contentType"] = "application/json";
            }
    );
}
