using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Drawing;
using VEPROMS.CSLA.Library;
namespace Volian.Controls.Library
{
	public partial class DisplayTabItem : DevComponents.DotNetBar.DockContainerItem
	{
		#region Private Fields
		private DisplayTabControl _MyDisplayTabControl;
		private ItemInfo _MyItemInfo;
		private StepTabPanel _MyStepTabPanel;
		private string _MyKey;
		private DSOTabPanel _MyDSOTabPanel;
        private DocumentInfo _MyDocumentInfo;
        
		#endregion
		#region Properties
		/// 
		/// ItemInfo associated with this DisplayTabItem
		/// 
		private int _OwnerID;
		public int OwnerID
		{
			get { return _OwnerID; }
			set { _OwnerID = value; }
		}
		public ItemInfo MyItemInfo
		{
			get { return _MyItemInfo; }
			//set { _MyItemInfo = value; }
		}
		/// 
		/// get Key Either: 
		///		"Item - " + Procedure ItemID for step pages
		///		"Doc - " + DocumentID for Word Documents
		/// 
		public string MyKey
		{
			get { return _MyKey; }
		}
		/// 
		/// Related StepTabPanel for a Step page
		/// 
		public StepTabPanel MyStepTabPanel
		{
			get { return _MyStepTabPanel; }
			set { _MyStepTabPanel = value; }
		}
		/// 
		/// Related DSOTabPanle for a Word page
		/// 
		public DSOTabPanel MyDSOTabPanel
		{
			get { return _MyDSOTabPanel; }
			set { _MyDSOTabPanel = value; }
		}
		private string _MyUserRole;
		public string MyUserRole
		{
			get { return _MyUserRole; }
			set { _MyUserRole = value; }
		}
		/// 
		/// Current SelectedItemInfo for this page
		/// 
		public ItemInfo SelectedItemInfo
		{
			get 
			{
				if (_MyStepTabPanel == null) return null;
				return _MyStepTabPanel.SelectedItemInfo;
			}
			set 
			{
				Console.WriteLine("selectediteminfo");
				_MyStepTabPanel.SelectedItemInfo = value;
			}
		}
        /// 
        /// Current DocumentInfo for this page - only set if library document
        /// 
        public DocumentInfo MyDocumentInfo
        {
            get { return _MyDocumentInfo; }
        }
		#endregion
		#region Constructors
		public DisplayTabItem(IContainer container, DisplayTabControl myDisplayTabControl, ItemInfo myItemInfo, string myKey)
		{
			_MyItemInfo = myItemInfo;
			if(MyItemInfo.MyContent.MyEntry == null)
				OwnerID = myDisplayTabControl.MySessionInfo.CheckOutItem(myItemInfo.MyProcedure.ItemID, CheckOutType.Procedure);
			else
				OwnerID = myDisplayTabControl.MySessionInfo.CheckOutItem(myItemInfo.MyContent.MyEntry.DocID, CheckOutType.Document);
			Console.WriteLine("DisplayTabItem");
			_MyKey = myKey;
			_MyDisplayTabControl = myDisplayTabControl;
			container.Add(this);
			InitializeComponent();
			this.Click += new EventHandler(DisplayTabItem_Click);
			if (myItemInfo.MyContent.MyEntry == null)
				SetupStepTabPanel();
			else
				SetupDSOTabPanel();
			SetupSecurity(myItemInfo);
			Name = string.Format("DisplayTabItem {0}", myItemInfo.ItemID);
		}
		private bool MesssageShown = false;
		public void SetupSecurity(ItemInfo myItem)
		{
			UserInfo ui = UserInfo.GetByUserID(OwnerInfo.Get(OwnerID).SessionUserID);
			if (ui == null)
			{
				if (!MesssageShown)
				{
					System.Windows.Forms.MessageBox.Show("Security has not been defined for PROMS.  All functionality has been defaulted to the lowest level for all users until security is defined.", "no security defined", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Warning);
					MesssageShown = true;
				}
				_MyStepTabPanel.MyStepTabRibbon.SetupReviewerMode();
			}
			else if (ui.IsAdministrator())
			{
				if(_MyStepTabPanel != null)
					_MyStepTabPanel.MyStepTabRibbon.SetupAdminMode();
				MyUserRole = Volian.Base.Library.VlnSettings.UserID + " - Administrator";
			}
			else if (ui.IsSetAdministrator(myItem.MyDocVersion))
			{
				if (_MyStepTabPanel != null)
					_MyStepTabPanel.MyStepTabRibbon.SetupSetAdminMode();
				MyUserRole = Volian.Base.Library.VlnSettings.UserID + " - Set Administrator";
			}
			else if (ui.IsROEditor(myItem.MyDocVersion))
			{
				if (_MyStepTabPanel != null)
					_MyStepTabPanel.MyStepTabRibbon.SetupROEditorMode();
				MyUserRole = Volian.Base.Library.VlnSettings.UserID + " - RO Editor";
			}
			else if (ui.IsWriter(myItem.MyDocVersion))
			{
				if (_MyStepTabPanel != null)
					_MyStepTabPanel.MyStepTabRibbon.SetupWriterMode();
				MyUserRole = Volian.Base.Library.VlnSettings.UserID + " - Writer";
			}
			else if (ui.IsReviewer(myItem.MyDocVersion))
			{
				if (_MyStepTabPanel != null)
					_MyStepTabPanel.MyStepTabRibbon.SetupReviewerMode();
				MyUserRole = Volian.Base.Library.VlnSettings.UserID + " - Reviewer";
			}
			else
			{
				if (_MyStepTabPanel != null)
					_MyStepTabPanel.MyStepTabRibbon.SetupReviewerMode();
				MyUserRole = Volian.Base.Library.VlnSettings.UserID + " - Reviewer";
			}
		}
        public DisplayTabItem(IContainer container, DisplayTabControl myDisplayTabControl, DocumentInfo myDocumentInfo, string myKey)
        {
            _MyKey = myKey;
            _MyDisplayTabControl = myDisplayTabControl;
            _MyDocumentInfo = myDocumentInfo;
            container.Add(this);
            InitializeComponent();
            this.Click += new EventHandler(DisplayTabItem_Click);
            SetupLibraryDocumentDSOTabPanel();
            Name = string.Format("DisplayTabLibraryDocument {0}", myDocumentInfo.DocID);
        }
       
		protected override void OnDisplayedChanged()
		{
			//Console.WriteLine("=>=>=>=> OnDisplayedChanged");
			if(_MyStepTabPanel != null)
				_MyStepTabPanel.MyStepPanel.DisplayItemChanging = true;
			base.OnDisplayedChanged();
			if(_MyStepTabPanel != null)
			_MyStepTabPanel.MyStepPanel.DisplayItemChanging = false;
			//Console.WriteLine("<=<=<=<= OnDisplayedChanged");
		}
		//void DisplayTabItem_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
		//{
		//  Console.WriteLine("DisplayTabItem_MouseUp");
		//}
		//void DisplayTabItem_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
		//{
		//  Console.WriteLine("DisplayTabItem_MouseDown");
		//}
		//void DisplayTabItem_LostFocus(object sender, EventArgs e)
		//{
		//  Console.WriteLine("DisplayTabItem_LostFocus");
		//}
		//void DisplayTabItem_GotFocus(object sender, EventArgs e)
		//{
		//  Console.WriteLine("DisplayTabItem_GotFocus");
		//}
		#endregion
		#region Event Handlers
		/// 
		/// Updates SelectedRTBItem when the user selects a DisplayTabItem
		/// 
		/// 
		/// 
		private void DisplayTabItem_Click(object sender, EventArgs e)
		{
			// Tell the TabControl that the ItemSelected has changed
			DisplayTabItem myTabItem = sender as DisplayTabItem;
			if(myTabItem == null)return;
			StepTabPanel myTabPanel = myTabItem.MyStepTabPanel as StepTabPanel;
			if(myTabPanel == null) return;
			if (MyStepTabPanel.SelectedEditItem == null) return;
			_MyDisplayTabControl.OnItemSelectedChanged(this,new ItemSelectedChangedEventArgs(MyStepTabPanel.SelectedEditItem));
		}
		#endregion
		#region private Methods
		/// 
		/// Creates and sets-up a StepTabPanel
		/// 
		private void SetupStepTabPanel()
		{
			((System.ComponentModel.ISupportInitialize)(_MyDisplayTabControl.MyBar)).BeginInit();
			_MyDisplayTabControl.MyBar.SuspendLayout();
			_MyStepTabPanel = new StepTabPanel(_MyDisplayTabControl);
			// 
			// tabItem
			// 
			Control = _MyStepTabPanel;
			Name = "tabItem Item " + _MyItemInfo.ItemID;
			Text = _MyItemInfo.TabTitle;
			Tooltip = _Tooltip = _MyItemInfo.TabToolTip.Replace("\u2011", "-");
			MouseMove += new System.Windows.Forms.MouseEventHandler(DisplayTabItem_MouseMove);
			LostFocus += new EventHandler(DisplayTabItem_LostFocus);
			//
			_MyDisplayTabControl.Controls.Add(_MyStepTabPanel);
			_MyDisplayTabControl.MyBar.Items.Add(this);
			_MyDisplayTabControl.MyBar.Width = 300; // This triggers the bar to resize itself
			// 
			// tabPanel
			// 
			_MyStepTabPanel.MyDisplayTabItem = this;
			((System.ComponentModel.ISupportInitialize)(_MyDisplayTabControl.MyBar)).EndInit();
			_MyDisplayTabControl.MyBar.ResumeLayout(false);
			DocVersionInfo dvi = _MyItemInfo.MyProcedure.ActiveParent as DocVersionInfo; //MyRTBItem.MyItemInfo.MyProcedure.ActiveParent as DocVersionInfo;
			if (dvi == null) return;
			if (dvi.VersionType > 127)
				MyStepTabPanel.MyStepPanel.VwMode = E_ViewMode.View;
			//added by jcb 20130718 to support disabling create pdf button when multiunit until user selects a unit
			if (dvi.MultiUnitCount > 1)
				this.MyStepTabPanel.MyStepTabRibbon.btnPdfCreate.Enabled = false;
			else
				this.MyStepTabPanel.MyStepTabRibbon.btnPdfCreate.Enabled = true;
			//end added by jcb 20130718
		}
		void DisplayTabItem_LostFocus(object sender, EventArgs e)
		{
			if(Tooltip != _Tooltip)
				Tooltip = _Tooltip;
		}
		private string _Tooltip;
		public void SetPrivateTooltip(string tt)
		{
			_Tooltip = tt;
		}
		void DisplayTabItem_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
		{
			string newTooltip = e.Y > 30 ? null : _Tooltip;
			if(Tooltip != newTooltip) 
				Tooltip = newTooltip;
		}
		/// 
		/// Creates and sets-up a DSOTabPanel
		/// 
		private void SetupDSOTabPanel()
		{
			EntryInfo myEntry = _MyItemInfo.MyContent.MyEntry;
			_MyDSOTabPanel = new DSOTabPanel(myEntry.MyDocument, _MyDisplayTabControl, _MyItemInfo);
			// 
			// tabItem
			// 
			Control = _MyDSOTabPanel;
			Name = "tabItem Item " + _MyItemInfo.ItemID;
			Text = _MyItemInfo.TabTitle;
			Tooltip = _Tooltip = _MyItemInfo.TabToolTip.Replace("\u2011", "-");
			MouseMove += new System.Windows.Forms.MouseEventHandler(DisplayTabItem_MouseMove);
			LostFocus += new EventHandler(DisplayTabItem_LostFocus);
			_MyDisplayTabControl.Controls.Add(_MyDSOTabPanel);
			DSOTabPanel.IgnoreEnter = true;
			//Console.WriteLine("AddRange {0}", Name);
			_MyDisplayTabControl.MyBar.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] {
            this});
			// 
			// tabPanel
			// 
			_MyDisplayTabControl.SelectDisplayTabItem(this);
			_MyDSOTabPanel.MyDisplayTabItem = this;
			DSOTabPanel.IgnoreEnter = false;
		}
        private void SetupLibraryDocumentDSOTabPanel()
        {
            _MyDSOTabPanel = new DSOTabPanel(_MyDocumentInfo, _MyDisplayTabControl, _MyItemInfo);
            // 
            // tabItem
            // 
            Control = _MyDSOTabPanel;
            Name = "tabLibraryDocument " + _MyDocumentInfo.DocID;
            Text = _MyDocumentInfo.LibTitle;
            DocumentConfig dc = new DocumentConfig(_MyDocumentInfo);
						Tooltip = _Tooltip = dc.LibDoc_Comment;
			MouseMove += new System.Windows.Forms.MouseEventHandler(DisplayTabItem_MouseMove);
			LostFocus += new EventHandler(DisplayTabItem_LostFocus);
			_MyDisplayTabControl.Controls.Add(_MyDSOTabPanel);
            DSOTabPanel.IgnoreEnter = true;
            _MyDisplayTabControl.MyBar.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] {
            this});
            // 
            // tabPanel
            // 
            _MyDisplayTabControl.SelectDisplayTabItem(this);
            _MyDSOTabPanel.MyDisplayTabItem = this;
            DSOTabPanel.IgnoreEnter = false;
        }
		#endregion
		public override string ToString()
		{
			if (MyDSOTabPanel != null)
				return MyDSOTabPanel.ToString();
			if (MyStepTabPanel != null)
				return MyStepTabPanel.ToString();
			return "NULL";
		}
	}
}