// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for details.

using System;
using System.ComponentModel;
using System.Windows.Forms;
using OpenLiveWriter.Localization;

namespace OpenLiveWriter.PostEditor.Tagging
{

    /// <summary>
    /// Summary description for TagProviderComboBox.
    /// </summary>
    public class TagProviderComboBox : ComboBox
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private Container components = null;

        public TagProviderComboBox()
        {
            // This call is required by the Windows.Forms Form Designer.
            InitializeComponent();

            DropDownStyle = ComboBoxStyle.DropDownList;
        }

        public void SetTagProviders(TagProvider[] providers)
        {
            Items.Clear();
            Items.AddRange(providers);
            Items.Add(new TagOptionsProvider());
        }

        public TagProvider SelectedTagProvider
        {
            get
            {
                return SelectedItem as TagProvider;
            }
            set
            {
                SelectedItem = value;
            }
        }

        public event EventHandler ManageProviders;

        protected void OnManageProviders()
        {
            if (ManageProviders != null)
                ManageProviders(this, EventArgs.Empty);
        }

        protected override void OnSelectedIndexChanged(EventArgs e)
        {
            _selectedIndex = SelectedIndex;
            base.OnSelectedIndexChanged(e);
        }
        private int _selectedIndex = -1;

        protected override void OnSelectionChangeCommitted(EventArgs e)
        {
            if (SelectedItem is TagOptionsProvider)
            {
                OnManageProviders();
                if (_selectedIndex > -1 && _selectedIndex < Items.Count)
                    SelectedIndex = _selectedIndex;
            }
            base.OnSelectionChangeCommitted(e);
        }

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                if (components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose(disposing);
        }

        #region Component Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            components = new System.ComponentModel.Container();
        }
        #endregion

        private class TagOptionsProvider
        {
            public override string ToString()
            {
                return Res.Get(StringId.TagsCustomizeProviders);
            }

        }
    }

}