using AutoFixture;
using AutoFixture.Kernel;
using Bit.Core.Context;
using Bit.Test.Common.AutoFixture;

namespace Bit.Core.Test.AutoFixture.CurrentContextFixtures
{
    internal class CurrentContext : ICustomization
    {
        public void Customize(IFixture fixture)
        {
            fixture.Customizations.Add(new CurrentContextBuilder());
        }
    }

    internal class CurrentContextBuilder : 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(ICurrentContext) != typeRequest)
            {
                return new NoSpecimen();
            }

            var obj = new Fixture().WithAutoNSubstitutions().Create<ICurrentContext>();
            obj.Organizations = context.Create<List<CurrentContentOrganization>>();
            return obj;
        }
    }
}