using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Data;

namespace MegaRobo.C00225155App.Converters
{
    public class DivisionConverter : IMultiValueConverter
    {
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            // 确保有两个值传入
            if (values == null || values.Length < 2)
                return 0.0;

            // 尝试解析分子和分母
            double numerator = TryParseDouble(values[0]);
            double denominator = TryParseDouble(values[1]);

            // 处理分母为零的情况
            if (denominator == 0)
                return 0.0;

            // 计算比例并确保在 [0,1] 范围内
            double ratio = numerator / denominator;
            return Math.Max(0, Math.Min(1, ratio));
        }

        private double TryParseDouble(object value)
        {
            if (value is double d) return d;
            if (value is int i) return i;
            if (value is float f) return f;
            if (value is decimal dec) return (double)dec;
            return 0.0;
        }

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

    public class InverseDivisionConverter : IMultiValueConverter
    {
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            // 确保有两个值传入
            if (values == null || values.Length < 2 || values[0] == DependencyProperty.UnsetValue || values[1] == DependencyProperty.UnsetValue)
                return 0.0;

            // 尝试解析分子和分母
            double numerator = TryParseDouble(values[0]);
            double denominator = TryParseDouble(values[1]);

            // 处理分母为零的情况
            if (denominator == 0)
                return 1.0; // 分母为零时返回1（表示100%已使用）

            // 计算剩余比例
            double remainingRatio = numerator / denominator;

            // 计算已使用比例：1 - 剩余比例
            double usedRatio = 1.0 - remainingRatio;

            Console.WriteLine($"InverseDivisionConverter: numerator={numerator}, denominator={denominator}, remainingRatio={remainingRatio}, usedRatio={usedRatio}");

            // 确保在 [0,1] 范围内
            return Math.Max(0, Math.Min(1, usedRatio));
        }

        private double TryParseDouble(object value)
        {
            if (value is double d) return d;
            if (value is int i) return i;
            if (value is float f) return f;
            if (value is decimal dec) return (double)dec;
            return 0.0;
        }

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

}
