// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview Defines the type of the CS_env Javascript object
 * provided by the Codesite server.
 *
 * This is marked as an externs file so that any variable defined with a
 * CS.env type will not have its properties renamed.
 * @externs
 */

/** Codesite namespace object. */
var CS = {};

/**
 * Javascript object holding basic information about the current page.
 * This is defined as an interface so that we can use CS.env as a Closure
 * type name, but it will never be implemented; rather, it will be
 * made available on every page as the global object CS_env (see
 * codesite/templates/demetrius/header.ezt).
 *
 * The type of the CS_env global object will actually be one of
 * CS.env, CS.project_env, etc. depending on the page
 * rendered by the server.
 *
 * @interface
 */
CS.env = function() {};

/**
 * Like relativeBaseUrl, but a full URL preceded by http://code.google.com
 * @type {string}
 */
CS.env.prototype.absoluteBaseUrl;

/**
 * Path to versioned static assets (mostly js and css).
 * @type {string}
 */
CS.env.prototype.appVersion;

/**
 * Request token for the logged-in user, or null for the anonymous user.
 * @type {?string}
 */
CS.env.prototype.token;

/**
 * Email address of the logged-in user, or null for anon.
 * @type {?string}
 */
CS.env.prototype.loggedInUserEmail;

/**
 * Url to the logged-in user's profile, or null for anon.
 * @type {?string}
 */
CS.env.prototype.profileUrl;

/**
 * CS.env specialization for browsing project pages.
 * @interface
 * @extends {CS.env}
 */
CS.project_env = function() {};

/** @type {string} */
CS.project_env.prototype.projectName;
