using System.Collections.Generic;
using System.Linq;

namespace UnityEditor.PackageManager.UI.Tests
{
    internal class MockOperationFactory : IOperationFactory
    {
        public IEnumerable<PackageInfo> Packages { get; set; }
        public MockAddOperation AddOperation { get; set; }
        public MockSearchOperation SearchOperation { private get; set; }
        public MockRemoveOperation RemoveOperation { private get; set; }

        public MockOperationFactory()
        {
            Packages = Enumerable.Empty<PackageInfo>();
        }

        public void ResetOperations()
        {
            if (AddOperation != null) 
                AddOperation.ResetEvents();
            AddOperation = null;
            
            if (RemoveOperation != null) 
                RemoveOperation.ResetEvents();
            RemoveOperation = null;

            SearchOperation = null;
        }

        public IListOperation CreateListOperation(bool offlineMode = false)
        {          
            return new MockListOperation(this);
        }

        public ISearchOperation CreateSearchOperation()
        {          
            return SearchOperation ?? new MockSearchOperation(this, Packages);
        }

        public IAddOperation CreateAddOperation()
        {
            return AddOperation ?? new MockAddOperation(this, Packages.First());
        }

        public IRemoveOperation CreateRemoveOperation()
        {
            return RemoveOperation ?? new MockRemoveOperation(this);
        }
    }
}