using System.Collections.ObjectModel;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;

namespace Splitter_UI.ViewModels;

public partial class InspectorPaneViewModel : ObservableObject
{
    [ObservableProperty]
    private JobViewModel? _selected;

    public ObservableCollection<JobViewModel> Files { get; set; } = [];

    public List<string> DetectModes => 
        [  
            "face", "body", "none"
        ];

    [RelayCommand]
    private void TransformAll()
    {
        _ = _main.Start();
    }


    [RelayCommand]
    private void ApplyOverrides()
    {
        if (Selected is null)
            return;

        foreach (JobViewModel job in Files.Where(x => !ReferenceEquals(x, Selected)))
            job.CopyFrom(Selected);
    }

    public IRelayCommand RotateLeftCommand { get; }
    public IRelayCommand RotateRightCommand { get; }

    private MainViewModel _main = null!;

    public InspectorPaneViewModel()
    {
        RotateLeftCommand = new RelayCommand(() => AdjustRotation(-90));
        RotateRightCommand = new RelayCommand(() => AdjustRotation(+90));
    }

    public void SetMain(MainViewModel main) => _main = main;

    private void AdjustRotation(int delta)
    {
        if ( Selected == null)
            return;

        var r = Selected.Rotate;
        r = (r + delta) % 360;
        if (r < 0) r += 360;

        Selected.Rotate = r;
    }

}
