using System;
using System.Collections.Generic;
using System.ComponentModel;

namespace B4Restore.Common
{
	public enum PerformanceTypes
	{
		io,
		mb,
		percent
	}

	/// <summary>
	/// MUST used in DB with toLower(); !!!
	/// </summary>
	public enum ControlTypes
	{
		MDiskPerformanceChart = 1,
		MDiskThroughputChart
	}

	/// <summary>
	/// MUST used in DB with toLower(); !!!
	/// </summary>
	public enum SVCErrorType
    {
        cluster,
        controller,
        [Description("ethernet adapter")]
        ethernet_adapter,
        fc_card,
        fc_const_grp,
        fcmap,
        flash,
        host,
        [Description("internal")]
        Internal,
        iogrp,
        mdisk,
        mdisk_grp,
        migrate,
        node,
        rc_const_grp,
        rcrelationship,
        remote,
        sevdiskcopy,
        unknown,
        vdisk,
        vdiskcopy
	}

	public enum TableNames
	{
		ACTLOG,
		ADMIN_SCHEDULES,
		ADMINS,
		AR_COPYGROUPS,
		ASSOCIATIONS,
		BACKUPSETS,
		BU_COPYGROUPS,
		CLIENT_SCHEDULES,
		DB,
		DBVOLUMES,
		DEVCLASSES,
		DOMAINS,
		DRIVES,
		EVENTS,
		FILESPACES,
		LIBRARIES,
		LIBVOLUMES,
		LOG,
		LOGVOLUMES,
		MGMTCLASSES,
		NODES,
		OCCUPANCY,
		PATHS,
		POLICYSETS,
		SAN,
		SCRIPT_NAMES,
		SCRIPTS,
		SERVERS,
		STATUS,
		STGPOOLS,
		SUMMARY,
		VOLHISTORY,
		VOLUMES
	}

	public enum GetPostSession
	{
		Get = 1,
		Post = 2,
		Session = 3
	}

	public enum EventSource
	{
		Wizard = 1,
		Operator = 2,
		TSMService = 3,
		SVCService = 4
	}

	public enum UserRole
	{
		Admin = 1,
		Partner = 2,
		Client = 3,
        RBClient = 4
	}
	
    public enum MultiRole
	{
        SuperAdmin,
        PartnerAdmin,
        UserAdmin,
        WizardsAdmin,
        SVCUser,
        TSMUser,
        SFUser,
        CMDUser,
        RBCUser,
        ClariionUser
	}

	public enum TableType
	{
		State = 1,
		StateWithHistory = 2,
		Log = 3
	}

	public enum VolHistoryType
	{
		BACKUPFULL,
		BACKUPINCR,
		RPFILE,
		STGDELETE,
		STGNEW,
		STGREUSE
	}

	public enum VolumeStatus
	{
		EMPTY,
		FILLING,
		FULL,
		OFFLINE,
		ONLINE,
		PENDING
	}

	public enum VolumeAccess
	{
		READWRITE,
		READONLY,
		UNAVAILABLE,
		DESTROYED,
		OFFSITE
	}

	public enum LibVolumeStatus
	{
		Private,
		Scratch,
		Cleaner
	}

	public enum LibVolumeLastUse
	{
		Data,
		DbBackup,
		Other
	}

	public enum AlertStatusType
	{
		Raised = 1,
		Snoozed = 2,
		Closed = 3
	}

	public enum AlertNotificationType
	{
		Email = 1,
		SMS = 2,
		EventLog = 3
	}

	public enum DirectionMove
	{
		LeftToRight = 1,
		RightToLeft = 2,
		LeftToRightCopy = 3,
		RightToLeftCopy = 4,
		LeftToNowhere = 5,
		RightToNowhere = 6
	}

	public class Equality
	{
		private static readonly HashSet<String> Signs = new HashSet<string> { "<=", "=", ">=" };

		public static HashSet<String> LoadSigns()
		{
			return Signs;
		}
	}

	public class Severity
	{
		private static readonly HashSet<String> Signs = new HashSet<string> { "I", "E", "W", "S", "D" };

		public static HashSet<String> LoadSigns()
		{
			return Signs;
		}
	}

	public class Originator
	{
		private static readonly HashSet<String> Signs = new HashSet<string> { "SERVER", "CLIENT" };

		public static HashSet<String> LoadSigns()
		{
			return Signs;
		}
	}

	public enum CustomUserSettingType
	{
		GridPageSize = 1,
		LandingPage = 2
	}

	public enum Alignment
	{
		la = 1,
		ca = 2,
		ra = 3
	}

	public enum LicenseType
	{
		TSM,
		CMD,
		SVC,
		SF,
		Clariion,
		Operator,
		Debriefit
	}

    public  enum WidgetType
    {
        TSM,
        SVC,
        OTHER,
        SF,
        Clariion
    }

	public class AlertInstanceColumnExclusion
	{
		private static readonly HashSet<string> Columns = new HashSet<string>
																		  {
																			  // Empty? Yes!!! Empty!!!
																		  };

		public static HashSet<string> LoadColumns()
		{
			return Columns;
		}
	}

	public enum ClientActivityType
	{
		ARCHIVE,
		BACKUP,
		RESTORE,
		RETRIEVE
	}
}