/**
 * Copyright 2009 Google Inc.
 * 
 * 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.
 */

import("funhtml.*");
import("stringutils.md5");
import("sqlbase.persistent_vars");

import("etherpad.licensing");

jimport("java.lang.System.out.println");
jimport("java.lang.System");


function isPNE() {
  if (appjet.cache.fakePNE || appjet.config['etherpad.fakePNE']) {
    return true;
  }
  if (getVersionString()) {
    return true;
  }
  return false;
}

/**
 * Versioning scheme: we basically just use the apache scheme of MAJOR.MINOR.PATCH:
 *
 *     Versions are denoted using a standard triplet of integers: MAJOR.MINOR.PATCH. The
 *     basic intent is that MAJOR versions are incompatible, large-scale upgrades of the API.
 *     MINOR versions retain source and binary compatibility with older minor versions, and
 *     changes in the PATCH level are perfectly compatible, forwards and backwards.
 */

function getVersionString() {
  return appjet.config['etherpad.pneVersion'];
}

function parseVersionString(x) {
  var parts = x.split('.');
  return {
    major: Number(parts[0] || 0),
    minor: Number(parts[1] || 0),
    patch: Number(parts[2] || 0)
  };
}

/* returns {major: int, minor: int, patch: int} */
function getVersionNumbers() {
  return parseVersionString(getVersionString());
}

function checkDbVersionUpgrade() {
  var dbVersionString = persistent_vars.get("db_pne_version");
  var runningVersionString = getVersionString();

  if (!dbVersionString) {
    println("Upgrading to Private Network Edition, version: "+runningVersionString);
    return;
  }

  var dbVersion = parseVersionString(dbVersionString);
  var runningVersion = getVersionNumbers();
  var trueRegex = /\s*true\s*/i;
  var force = trueRegex.test(appjet.config['etherpad.forceDbUpgrade']);

  if (!force && (runningVersion.major != dbVersion.major)) {
    println("Error: you are attempting to update an EtherPad["+dbVersionString+
            "] database to version ["+runningVersionString+"].  This is not possible.");
    println("Exiting...");
    System.exit(1);
  }
  if (!force && (runningVersion.minor < dbVersion.minor)) {
    println("Error: your etherpad database is at a newer version ["+dbVersionString+"] than"+
            " the current running etherpad ["+runningVersionString+"].  Please upgrade to the "+
            " latest version.");
    println("Exiting...");
    System.exit(1);
  }
  if (!force && (runningVersion.minor > (dbVersion.minor + 1))) {
    println("\n\nWARNING: you are attempting to upgrade from version "+dbVersionString+" to version "+
            runningVersionString+".  It is recommended that you upgrade one minor version at a time."+
            " (The \"minor\" version number is the second number separated by dots.  For example,"+
            " if you are running version 1.2, it is recommended that you upgrade to 1.3 and then 1.4 "+
            " instead of going directly from 1.2 to 1.4.");
    println("\n\nIf you really want to do this, you can force us to attempt the upgrade with "+
            " the --etherpad.forceDbUpgrade=true flag.");
    println("\n\nExiting...");
    System.exit(1);
  }
  if (runningVersion.minor > dbVersion.minor) {
    println("Upgrading database to version "+runningVersionString);
  }
}

function saveDbVersion() {
  var dbVersionString = persistent_vars.get("db_pne_version");
  if (getVersionString() != dbVersionString) {
    persistent_vars.put('db_pne_version', getVersionString());
    println("Upgraded Private Network Edition version to ["+getVersionString()+"]");
  }
}

// These are a list of some of the config vars documented in the PNE manual.  They are here
// temporarily, until we move them to the PNE config UI.

var _eepneAllowedConfigVars = [
  'configFile',
  'etherpad.soffice',
  'etherpad.useMySQL',
  'etherpad.SQL_JDBC_DRIVER',
  'etherpad.SQL_JDBC_URL',
  'etherpad.SQL_PASSWORD',
  'etherpad.SQL_USERNAME',
  'etherpad.adminPass',
  'etherpad.licenseKey',
  'listen',
  'listenSecure',
  'smtpPass',
  'smtpServer',
  'smtpUser',
  'sslKeyPassword',
  'sslKeyStore'
];

function isServerLicensed() {
  return true;
}

function enableTrackingAgain() {
}

function pneTrackerHtml() {
  appjet.cache.noMorePneTracking = true;
}



