namespace HistoryView.Controls.Configs;

public partial class ChannelComparision : UserControl
{
    public ChannelComparision()
    {
        InitializeComponent();
    }

    public TempConfigSubChannel Source
    {
        get { return (TempConfigSubChannel)GetValue(SourceProperty); }
        set { SetValue(SourceProperty, value); }
    }

    public static readonly DependencyProperty SourceProperty =
        DependencyProperty.Register("Source", typeof(TempConfigSubChannel), typeof(ChannelComparision), new PropertyMetadata(default, TempChangedCallback));

    public TempConfigSubChannel Target
    {
        get { return (TempConfigSubChannel)GetValue(TargetProperty); }
        set { SetValue(TargetProperty, value); }
    }

    public static readonly DependencyProperty TargetProperty =
        DependencyProperty.Register("Target", typeof(TempConfigSubChannel), typeof(ChannelComparision), new PropertyMetadata(default, TempChangedCallback));


    static void TempChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        if (d is not ChannelComparision act)
            return;

        if (act.Target is null || act.Source is null)
            return;

        Compare(act, act.Source, act.Target);
    }

    private static void Compare(ChannelComparision act, TempConfigSubChannel source, TempConfigSubChannel target)
    {
        act.Index.Background = new SolidColorBrush(Colors.Transparent);
        act.SetPoint.Background = new SolidColorBrush(Colors.Transparent);
        act.CapsWarning.Background = new SolidColorBrush(Colors.Transparent);
        act.FloorWarning.Background = new SolidColorBrush(Colors.Transparent);
        act.UpperLimit.Background = new SolidColorBrush(Colors.Transparent);
        act.LowerLimit.Background = new SolidColorBrush(Colors.Transparent);
        act.Running_P.Background = new SolidColorBrush(Colors.Transparent);
        act.Running_I.Background = new SolidColorBrush(Colors.Transparent);
        act.Running_D.Background = new SolidColorBrush(Colors.Transparent);
        act.SetpointUpRate.Background = new SolidColorBrush(Colors.Transparent);
        act.SetpointDownRate.Background = new SolidColorBrush(Colors.Transparent);
        

        if (source.SetPoint != target.SetPoint)
            act.SetPoint.Background = (Brush)App.Current.Resources["LightWarningColor"];

        if (source.CapsWarning != target.CapsWarning)
            act.CapsWarning.Background = (Brush)App.Current.Resources["LightWarningColor"];

        if (source.FloorWarning != target.FloorWarning)
            act.FloorWarning.Background = (Brush)App.Current.Resources["LightWarningColor"];

        if (source.Caps != target.Caps)
            act.UpperLimit.Background = (Brush)App.Current.Resources["LightWarningColor"];

        if (source.Floor != target.Floor)
            act.LowerLimit.Background = (Brush)App.Current.Resources["LightWarningColor"];

        if (source.Running_P != target.Running_P)
            act.Running_P.Background = (Brush)App.Current.Resources["LightWarningColor"];

        if (source.Running_I != target.Running_I)
            act.Running_I.Background = (Brush)App.Current.Resources["LightWarningColor"];

        if (source.Running_D != target.Running_D)
            act.Running_D.Background = (Brush)App.Current.Resources["LightWarningColor"];

        if (source.SetpointUpRate != target.SetpointUpRate)
            act.SetpointUpRate.Background = (Brush)App.Current.Resources["LightWarningColor"];

        if (source.SetpointDownRate != target.SetpointDownRate)
            act.SetpointDownRate.Background = (Brush)App.Current.Resources["LightWarningColor"];
    }
}
