using System;
using System.Globalization;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Media;

namespace MECF.Framework.UI.Client.CenterViews.Controls
{
    public partial class LED : UserControl
    {
        // Using a DependencyProperty as the backing store for On.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty OnProperty =
            DependencyProperty.Register("On", typeof(bool), typeof(LED), new PropertyMetadata(false));

        // Using a DependencyProperty as the backing store for IsRed.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty IsRedProperty =
            DependencyProperty.Register("IsRed", typeof(bool), typeof(LED), new PropertyMetadata(false));

        public LED()
        {
            InitializeComponent();
            root.DataContext = this;
        }

        public bool On
        {
            get => (bool) GetValue(OnProperty);
            set => SetValue(OnProperty, value);
        }

        public bool IsRed
        {
            get => (bool) GetValue(IsRedProperty);
            set => SetValue(IsRedProperty, value);
        }
    }
    
    public class LedConverter : IMultiValueConverter
    {
        static Brush GreenBrush = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FF07FF07"));
        static Brush GrayBrush = new SolidColorBrush(Colors.LightGray);
        static Brush RedBrush = new SolidColorBrush(Colors.Red);

        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            var value = (bool)values[0];
            var red = (bool)values[1];
            return value ? red ? RedBrush : GreenBrush : GrayBrush;
        }

        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}