using System.Diagnostics;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using InABox.Core;

namespace InABox.DynamicGrid
{
    public class URLEditorControl : DynamicEditorControl<string, URLEditor>
    {
        
        static URLEditorControl()
        {
            //DynamicEditorControlFactory.Register<URLEditorControl, URLEditor>();
        }
        
        private TextBox Editor;

        public override void Configure()
        {
        }

        protected override FrameworkElement CreateEditor()
        {
            var dock = new DockPanel
            {
                VerticalAlignment = VerticalAlignment.Stretch,
                HorizontalAlignment = HorizontalAlignment.Stretch
            };

            var button = new Button
            {
                Content = "Go",
                VerticalAlignment = VerticalAlignment.Stretch,
                VerticalContentAlignment = VerticalAlignment.Center,
                Padding = new Thickness(5, 0, 5, 0)
            };
            button.Click += (o, e) => { Process.Start(new ProcessStartInfo(Editor.Text) { UseShellExecute = true }); };
            button.SetValue(DockPanel.DockProperty, Dock.Right);
            dock.Children.Add(button);

            Editor = new TextBox
            {
                VerticalAlignment = VerticalAlignment.Stretch,
                VerticalContentAlignment = VerticalAlignment.Center,
                HorizontalAlignment = HorizontalAlignment.Stretch,
                Margin = new Thickness(0, 0, 5, 0)
            };
            Editor.SetValue(DockPanel.DockProperty, Dock.Left);
            Editor.TextChanged += (o, e) => { CheckChanged(); };
            dock.Children.Add(Editor);

            return dock;
        }

        public override int DesiredHeight()
        {
            return 25;
        }

        public override int DesiredWidth()
        {
            return int.MaxValue;
        }

        protected override string RetrieveValue()
        {
            return Editor.Text;
        }

        protected override void UpdateValue(string value)
        {
            Editor.Text = value;
        }

        public override void SetFocus()
        {
            Editor.Focus();
        }

        public override void SetColor(Color color)
        {
            Editor.Background = new SolidColorBrush(color);
        }
    }
}