using System;
using System.Collections.Generic;
using System.Windows;
using InABox.Core;

namespace InABox.DynamicGrid
{
    public class ColumnNameGenerator : LookupGenerator<object>
    {
        public ColumnNameGenerator(object[] items) : base(items)
        {
            //DynamicGridColumns cols = new DynamicGridColumns();
            //cols.ExtractColumns(type, "");
            //foreach (DynamicGridColumn col in cols.Where(x => (x.Editor != null) && (x.Editor.Visible != Visible.Disabled)))
            //    AddValue(col.ColumnName, col.ColumnName);
        }
    }

    public class DynamicGridColumn : DynamicColumnBase
    {
        public DynamicGridColumn()
        {
            Editor = new NullEditor();
            Lookups = new Dictionary<object, object>();
        }

        [ComboLookupEditor(typeof(ColumnNameGenerator))]
        [EditorSequence(1)]
        public string ColumnName { get; set; }

        [EditorSequence(2)]
        public int Width { get; set; }

        [EditorSequence(3)]
        public string Format { get; set; }

        [EditorSequence(4)]
        public string Caption { get; set; }

        [EnumLookupEditor(typeof(Alignment))]
        [EditorSequence(5)]
        public Alignment Alignment { get; set; }

        [NullEditor]
        public Dictionary<object, object> Lookups { get; set; }

        public BaseEditor Editor { get; set; }

        public VerticalAlignment VerticalAlignment()
        {
            if (Alignment.Equals(Alignment.NotSet))
                return System.Windows.VerticalAlignment.Center;
            if (Alignment.Equals(Alignment.TopLeft) || Alignment.Equals(Alignment.TopCenter) || Alignment.Equals(Alignment.TopRight))
                return System.Windows.VerticalAlignment.Top;
            if (Alignment.Equals(Alignment.MiddleLeft) || Alignment.Equals(Alignment.MiddleCenter) || Alignment.Equals(Alignment.MiddleRight))
                return System.Windows.VerticalAlignment.Center;
            return System.Windows.VerticalAlignment.Bottom;
        }

        public HorizontalAlignment HorizontalAlignment(Type datatype)
        {
            if (Alignment.Equals(Alignment.NotSet))
                return datatype.IsNumeric() ? System.Windows.HorizontalAlignment.Right :
                    datatype == typeof(bool) ? System.Windows.HorizontalAlignment.Center : System.Windows.HorizontalAlignment.Left;
            if (Alignment.Equals(Alignment.TopLeft) || Alignment.Equals(Alignment.MiddleLeft) || Alignment.Equals(Alignment.BottomLeft))
                return System.Windows.HorizontalAlignment.Left;
            if (Alignment.Equals(Alignment.TopCenter) || Alignment.Equals(Alignment.MiddleCenter) || Alignment.Equals(Alignment.BottomCenter))
                return System.Windows.HorizontalAlignment.Center;
            return System.Windows.HorizontalAlignment.Right;
        }

        public override string ToString()
        {
            return ColumnName;
        }
    }
}