using System;
using AutoFixture;
using AutoFixture.Kernel;

namespace Bit.Test.Common.AutoFixture
{
    public class SutProviderCustomization : ICustomization, ISpecimenBuilder
    {
        public object Create(object request, ISpecimenContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }
            if (!(request is Type typeRequest))
            {
                return new NoSpecimen();
            }
            if (!typeof(ISutProvider).IsAssignableFrom(typeRequest))
            {
                return new NoSpecimen();
            }

            return ((ISutProvider)Activator.CreateInstance(typeRequest)).Create();
        }

        public void Customize(IFixture fixture)
        {
            fixture.Customizations.Add(this);
        }
    }
}