var wd = require("../wd-helper");
var uuid = require('uuid/v1');
var geoServer = require("../geojson-server");


var geoserver = geoServer.listen(9002);

module.exports = {
  getStyleUrl: function(styles) {
    var port = geoserver.address().port;
    return "http://localhost:"+port+"/styles/empty/"+styles.join(",");
  },
  getGeoServerUrl: function(urlPath) {
    var port = geoserver.address().port;
    return "http://localhost:"+port+"/"+urlPath;
  },
  getStyleStore: function(browser) {
    var result = browser.executeAsync(function(done) {
      window.debug.get("maputnik", "styleStore").latestStyle(done);
    })
    return result.value;
  },
  getRevisionStore: function(browser) {
    var result = browser.execute(function(done) {
      var rs = window.debug.get("maputnik", "revisionStore")

      return {
        currentIdx: rs.currentIdx,
        revisions: rs.revisions
      };
    })
    return result.value;
  },
  modal: {
    addLayer: {
      open: function() {
        var selector = wd.$('layer-list:add-layer');
        browser.click(selector);

        // Wait for events
        browser.flushReactUpdates();

        browser.waitForExist(wd.$('modal:add-layer'));
        browser.isVisible(wd.$('modal:add-layer'));
        browser.isVisibleWithinViewport(wd.$('modal:add-layer'));

        // Wait for events
        browser.flushReactUpdates();
      },
      fill: function(opts) {
        var type = opts.type;
        var layer = opts.layer;
        var id;
        if(opts.id) {
          id = opts.id
        }
        else {
          id = type+":"+uuid();
        }

        browser.selectByValue(wd.$("add-layer.layer-type", "select"), type);
        browser.flushReactUpdates();

        browser.setValueSafe(wd.$("add-layer.layer-id", "input"), id);
        if(layer) {
          browser.setValueSafe(wd.$("add-layer.layer-source-block", "input"), layer);
        }

        browser.flushReactUpdates();
        browser.click(wd.$("add-layer"));

        return id;
      }
    }
  }
}