// Copyright 2014 The Cayley Authors. All rights reserved.
//
// Licensed 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.

$(function() {
  $("#sbVisualize").addClass("active");

  var createGraphVisualization = function(results) {
    if (window.sigmaGraph !== undefined) {
      sigmaGraph.stopForceAtlas2()
      sigmaGraph.kill()
      $("#visualize").text("")
    }
    var nodeMap = {}
    var g = {nodes: [], edges: []}
    for (var i = 0; i < results.length; i++) {
      result = results[i];
      source = result["source"]
      target = result["target"]
			var source_color
			var target_color
			if (result["source_color"] != undefined) {
				source_color = result["source_color"]
			} else {
				//source_color = "#2c3e50"
				source_color = "#001B8A"
			}
			if (result["target_color"] != undefined) {
				target_color = result["target_color"]
			} else {
				target_color = "#F09300"
			}
      if (nodeMap[source] !== true) {
        var data = {
          id: source,
          x: Math.random(),
          y: Math.random(),
          size: 10,
          color: source_color

        }
        if (result["source_label"] != undefined) {
          data.label = result["source_label"]
        } else {
          data.label = source
        }
        g.nodes.push(data)
        nodeMap[source] = true
      }
      if (nodeMap[target] !== true) {
        var data = {
          id: target,
          x: Math.random(),
          y: Math.random(),
          size: 10,
          color: target_color
        }
        if (result["target_label"] != undefined) {
          data.label = result["target_label"]
        } else {
          data.label = target
        }
        g.nodes.push(data)
        nodeMap[target] = true
      }
      g.edges.push({
        id: "e" + i,
        source: source,
        target: target,
        size: 5,
        color: '#ccc'
      })

    }
    sigmaGraph = new sigma({
      graph: g,
      container: 'visualize',
      settings: {
        defaultNodeColor: '#ec5148'
      }

    });
    sigmaGraph.startForceAtlas2();
		sigmaGraph.forceatlas2.p.linLogMode = true;
  }

  $("#run_button").click(function() {
    var data = editor.getValue()
    animate();
    $.post("/api/v1/query/" + selectedQueryLanguage, data)
      .done(function(return_data) {
        stopAndReset();
        if (typeof(Storage) !== "undefined") {
          localStorage.setItem("cayleySavedQueries" + selectedQueryLanguage, data)
        }
        links = $.parseJSON(return_data)
        createGraphVisualization(links.result)
      })
     .fail(function() {
         stopAndReset();
     });
  });
})
