using System.Threading.Tasks;
using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.Markup.Xaml;
using PolyTrader.Core.Modularity;
using PolyTraderSharp.Models;
using PolyTraderSharp.Services;

namespace PolyTrader.App.Avalonia.Views
{
    /// <summary>
    /// Hintergrund-Jobs (JobManager). Verhalten wie bisher: „Run Now" löst den ManualTrigger aus,
    /// „Aktiv" schaltet den Job über die Bindung. Layout vollständig in JobsWindow.axaml.
    /// </summary>
    public partial class JobsWindow : UserControl
    {
        public JobsWindow() => AvaloniaXamlLoader.Load(this);

        /// <param name="host">
        /// Wird für diese Seite nicht mehr gebraucht (die Navigation sitzt in der Shell), bleibt
        /// aber im Vertrag, weil <c>ModuleView.CreateView</c> alle Seiten gleich erzeugt.
        /// </param>
        public JobsWindow(IModuleUiHost host, JobManager jobManager) : this()
        {
            var grid = this.FindControl<DataGrid>("gridJobs")!;
            grid.ItemsSource = jobManager.Jobs;

            this.FindControl<Button>("btnRefresh")!.Click += (_, _) =>
            {
                // Die Zeilen aktualisieren sich über INotifyPropertyChanged von selbst; der Knopf
                // erzwingt lediglich ein Neuzeichnen (wie das frühere dgvJobs.Refresh()).
                grid.InvalidateVisual();
            };
        }

        /// <summary>Manuellen Lauf anstoßen – bewusst im Hintergrund, damit die Oberfläche nicht blockiert.</summary>
        private void OnRunNowClick(object? sender, RoutedEventArgs e)
        {
            if (sender is Button { DataContext: JobStatusRow job } && job.ManualTriggerAction != null)
                _ = Task.Run(() => job.ManualTriggerAction.Invoke());
        }
    }
}
