using Elwig.Helpers;
using System.Linq;
using System.Windows;
using System.Windows.Controls;

namespace Elwig.Dialogs {
    public partial class DeleteMemberDialog : Window {

        protected string[] NameParts;

        public bool DeleteAreaComs { get; set; }
        public bool DeleteDeliveries { get; set; }
        public bool DeletePaymentData { get; set; }

        public DeleteMemberDialog(int mgnr, string name, int numAreaComs, int numDeliveries, int numCredits) {
            NameParts = name.ToLower().Split(' ').Where(p => p.Length > 0).Append($"{mgnr}").ToArray();
            InitializeComponent();
            Title += " - " + name;
            AreaComInput.IsEnabled = numAreaComs != 0;
            AreaComInput.Content += $" ({numAreaComs:N0})";
            DeliveryInput.IsEnabled = numDeliveries != 0;
            DeliveryInput.Content += $" ({numDeliveries:N0})";
            PaymentInput.IsEnabled = numCredits != 0;
            PaymentInput.Content += $" ({numCredits:N0})";
        }

        private void NameInput_TextChanged(object sender, TextChangedEventArgs evt) {
            Update();
        }

        private void CheckBox_Changed(object sender, RoutedEventArgs evt) {
            Update();
        }

        private static void UpdateCheckBox(CheckBox cb) {
            if (cb.IsEnabled && cb.IsChecked != true) {
                ControlUtils.SetInputInvalid(cb);
            } else {
                ControlUtils.ClearInputState(cb);
            }
        }

        private void Update() {
            var t = NameInput.Text.ToLower().Split(' ');
            var nameValid = NameParts.All(t.Contains);
            UpdateCheckBox(AreaComInput);
            UpdateCheckBox(DeliveryInput);
            UpdateCheckBox(PaymentInput);
            if (!nameValid) {
                ControlUtils.SetInputInvalid(NameInput);
            } else {
                ControlUtils.ClearInputState(NameInput);
            }
            ConfirmButton.IsEnabled =
                (!AreaComInput.IsEnabled || DeleteAreaComs) &&
                (!DeliveryInput.IsEnabled || DeleteDeliveries) &&
                (!PaymentInput.IsEnabled || DeletePaymentData) &&
                nameValid;
        }

        private void ConfirmButton_Click(object sender, RoutedEventArgs evt) {
            DialogResult = true;
            Close();
        }
    }
}