using Elwig.Dialogs;
using Elwig.Helpers;
using Elwig.Helpers.Billing;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;

namespace Elwig.Windows {
    public partial class SeasonFinishWindow : ContextWindow {
        public SeasonFinishWindow() {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs evt) {
            SeasonInput.Value = Utils.CurrentLastSeason;
        }

        protected override async Task OnRenewContext() {
            SeasonInput_ValueChanged(null, null);
        }

        private async void SeasonInput_ValueChanged(object? sender, RoutedEventArgs? evt) {
            var s0 = await Context.Seasons.FindAsync(SeasonInput.Value);
            var s1 = await Context.Seasons.FindAsync(SeasonInput.Value + 1);
            var valid = (s0 != null);
            var last = (s1 == null);
            CalculateBinsButton.IsEnabled = valid && last;
            DeliveryConfirmationButton.IsEnabled = valid;
            OverUnderDeliveryButton.IsEnabled = valid;
        }

        private async void CalculateBinsButton_Click(object sender, RoutedEventArgs evt) {
            if (SeasonInput.Value is not int year)
                return;
            CalculateBinsButton.IsEnabled = false;
            Mouse.OverrideCursor = Cursors.AppStarting;
            var b = new Billing(year);
            await b.FinishSeason();
            await b.CalculateBins(
                AllowAttrIntoLowerBinsInput.IsChecked ?? false,
                AvoidUnderDeliveriesInput.IsChecked ?? false,
                HonorGebundenInput.IsChecked ?? false);
            Mouse.OverrideCursor = null;
            CalculateBinsButton.IsEnabled = true;
        }

        private void DeliveryConfirmationButton_Click(object sender, RoutedEventArgs evt) {
            if (SeasonInput.Value is not int year)
                return;
            var d = new DeliveryConfirmationsDialog(year);
            d.Show();
        }

        private void OverUnderDeliveryButton_Click(object sender, RoutedEventArgs evt) {
        }

        private void PaymentButton_Click(object sender, RoutedEventArgs evt) {
            var w = new ChartWindow();
            w.Show();
        }
    }
}