using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Markup;

using DevExpress.Xpf.Grid;

namespace BeWo.Controls
{
    [DefaultProperty("Content")]
    [ContentProperty("Content")]
    public class BSGridControl : Control
    {
        public static readonly DependencyProperty ContentProperty;

        public static readonly DependencyProperty GridControlProperty;

        public static readonly DependencyProperty OptionsContentProperty;

        public static readonly DependencyProperty OptionsExpandedProperty;

        // public static readonly DependencyProperty CurrentThemeNameProperty;

        static BSGridControl()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(BSGridControl), new FrameworkPropertyMetadata(typeof(BSGridControl)));
            ContentProperty = DependencyProperty.Register("Content", typeof(FrameworkElement), typeof(BSGridControl), new FrameworkPropertyMetadata(null));
            // CurrentThemeNameProperty = DependencyProperty.RegisterAttached("CurrentThemeName", typeof(string), typeof(BSGridControl), new FrameworkPropertyMetadata("Emerald", FrameworkPropertyMetadataOptions.Inherits, OnCurrentThemeNamePropertyChanged));
            OptionsContentProperty = DependencyProperty.Register("OptionsContent", typeof(FrameworkElement), typeof(BSGridControl), new FrameworkPropertyMetadata(null));
            GridControlProperty = DependencyProperty.Register("GridControl", typeof(GridControl), typeof(BSGridControl), new FrameworkPropertyMetadata(null));
            OptionsExpandedProperty = DependencyProperty.Register("OptionsExpanded", typeof(bool), typeof(BSGridControl), new FrameworkPropertyMetadata(true));
        }

        // public static string GetCurrentThemeName(DependencyObject obj)
        // {
        // return (string)obj.GetValue(CurrentThemeNameProperty);
        // }

        // public static void SetCurrentThemeName(DependencyObject obj, string value)
        // {
        // obj.SetValue(CurrentThemeNameProperty, value);
        // }

        // public static void OnCurrentThemeNamePropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
        // {
        // BSGridControl dm = obj as BSGridControl;
        // if (dm != null) dm.OnCurrentThemeNameChanged();
        // }
        public BSGridControl()
        {
            this.CreateGridControl();
        }

        // public virtual bool AllThemesEnabled { get { return true; } }
        // public bool OptionsExpanded
        // {
        // get { return (bool)GetValue(OptionsExpandedProperty); }
        // set { SetValue(OptionsExpandedProperty, value); }
        // }

        public FrameworkElement Content
        {
            get
            {
                return (FrameworkElement)this.GetValue(ContentProperty);
            }

            set
            {
                this.SetValue(ContentProperty, value);
            }
        }

        // public FrameworkElement OptionsContent
        // {
        // get { return (FrameworkElement)GetValue(OptionsContentProperty); }
        // set { SetValue(OptionsContentProperty, value); }
        // }
        public GridControl GridControl
        {
            get
            {
                return (GridControl)this.GetValue(GridControlProperty);
            }

            set
            {
                this.SetValue(GridControlProperty, value);
            }
        }

        private void CreateGridControl()
        {
            GridControl gc = new GridControl();

            this.GridControl = gc;
        }

        // public override void OnApplyTemplate()
        // {
        // base.OnApplyTemplate();
        // if (GridControl != null) return;
        // VisualTreeEnumerator en = new VisualTreeEnumerator(Content);
        // while (en.MoveNext())
        // {
        // if (en.Current is GridControl)
        // {
        // GridControl = (GridControl)en.Current;
        // RegisterDemoBaseThemes();
        // OnCurrentThemeNameChanged();
        // break;
        // }
        // }
        // }
        // public virtual void ShowOptions()
        // {
        // OptionsExpanded = true;
        // }
        // public virtual void HideOptions()
        // {
        // OptionsExpanded = false;
        // }
        // public string CurrentThemeName
        // {
        // get { return (string)GetValue(CurrentThemeNameProperty); }
        // set { SetValue(CurrentThemeNameProperty, value); }
        // }

        // protected virtual Theme CreateTheme(string themeName)
        // {
        // ResourceDictionary rd = XamlLoaderHelper<ResourceDictionary>.LoadFromApplicationResources(string.Format(@"\Themes\{0}.xaml", themeName));
        // if (rd == null)
        // return new Theme() { Source = themeName, LoadFromResources = true };
        // return rd[themeName] as Theme;
        // }
        // protected virtual Theme CreateTheme()
        // {
        // return CreateTheme(CurrentThemeName);
        // }

        // void RegisterDemoBaseTheme(string themeName)
        // {
        // if (DemoContent == null)
        // return;
        // ActionsList list = ThemeManager.GetActions(DemoContent);
        // if (list == null)
        // list = new ActionsList();
        // else
        // list = new ActionsList(list);

        // list.Add(new AddResourcesThemeAction()
        // {
        // ThemeName = themeName,
        // Resources = XamlLoaderHelper<ResourceDictionary>.LoadFromApplicationResources(string.Format(@"\Themes\{0}.xaml", themeName))
        // });
        // ThemeManager.SetActions(DemoContent, list);
        // }
        // protected virtual void RegisterDemoBaseThemes()
        // {
        // ThemeManager.SetCreateNew(this, true);
        // RegisterDemoBaseTheme("Emerald");
        // RegisterDemoBaseTheme("Azure");
        // }
        // protected virtual void OnCurrentThemeNameChanged()
        // {
        // if (GridControl == null) return;
        // GridControl.Theme = CreateTheme();
        // }
    }
}