/*
 * Copyright (c) 2018 ETH Zürich, Educational Development and Technology (LET)
 * 
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 */

using System;
using SafeExamBrowser.Contracts.Logging;

namespace SafeExamBrowser.Contracts.Configuration
{
	/// <summary>
	/// Defines the fundamental, global configuration information for all application components.
	/// </summary>
	[Serializable]
	public class AppConfig
	{
		/// <summary>
		/// The path of the application data folder.
		/// </summary>
		public string AppDataFolder { get; set; }

		/// <summary>
		/// The point in time when the application was started.
		/// </summary>
		public DateTime ApplicationStartTime { get; set; }

		/// <summary>
		/// The path where the browser cache is to be stored.
		/// </summary>
		public string BrowserCachePath { get; set; }

		/// <summary>
		/// The file path under which the log of the browser component is to be stored.
		/// </summary>
		public string BrowserLogFile { get; set; }

		/// <summary>
		/// The communication address of the client component.
		/// </summary>
		public string ClientAddress { get; set; }

		/// <summary>
		/// The executable path of the client compontent.
		/// </summary>
		public string ClientExecutablePath { get; set; }

		/// <summary>
		/// The unique identifier for the currently running client instance.
		/// </summary>
		public Guid ClientId { get; set; }

		/// <summary>
		/// The file path under which the log of the client component is to be stored.
		/// </summary>
		public string ClientLogFile { get; set; }

		/// <summary>
		/// The file extension of configuration files for the application (including the period).
		/// </summary>
		public string ConfigurationFileExtension { get; set; }

		/// <summary>
		/// The default file name for application settings.
		/// </summary>
		public string DefaultSettingsFileName { get; set; }

		/// <summary>
		/// The default directory for file downloads.
		/// </summary>
		public string DownloadDirectory { get; set; }

		/// <summary>
		/// The currently active, global log severity threshold.
		/// </summary>
		public LogLevel LogLevel { get; set; }

		/// <summary>
		/// The copyright information for the application (i.e. the executing assembly).
		/// </summary>
		public string ProgramCopyright { get; set; }

		/// <summary>
		/// The path of the program data folder.
		/// </summary>
		public string ProgramDataFolder { get; set; }

		/// <summary>
		/// The program title of the application (i.e. the executing assembly).
		/// </summary>
		public string ProgramTitle { get; set; }

		/// <summary>
		/// The program version of the application (i.e. the executing assembly).
		/// </summary>
		public string ProgramVersion { get; set; }

		/// <summary>
		/// The communication address of the runtime component.
		/// </summary>
		public string RuntimeAddress { get; set; }

		/// <summary>
		/// The unique identifier for the currently running runtime instance.
		/// </summary>
		public Guid RuntimeId { get; set; }

		/// <summary>
		/// The file path under which the log of the runtime component is to be stored.
		/// </summary>
		public string RuntimeLogFile { get; set; }

		/// <summary>
		/// The URI scheme for SEB resources.
		/// </summary>
		public string SebUriScheme { get; set; }

		/// <summary>
		/// The URI scheme for secure SEB resources.
		/// </summary>
		public string SebUriSchemeSecure { get; set; }

		/// <summary>
		/// The communication address of the service component.
		/// </summary>
		public string ServiceAddress { get; set; }
	}
}