using AutoFixture;
using AutoFixture.Dsl;
using Bit.Core.Models.Data;

namespace Bit.Core.Test.AutoFixture.CipherAttachmentMetaData
{
    public class MetaData : ICustomization
    {
        protected virtual IPostprocessComposer<CipherAttachment.MetaData> ComposerAction(IFixture fixture,
            ICustomizationComposer<CipherAttachment.MetaData> composer)
        {
            return composer.With(d => d.Size, fixture.Create<long>());
        }
        public void Customize(IFixture fixture)
        {
            fixture.Customize<CipherAttachment.MetaData>(composer => ComposerAction(fixture, composer));
        }
    }

    public class MetaDataWithoutContainer : MetaData
    {
        protected override IPostprocessComposer<CipherAttachment.MetaData> ComposerAction(IFixture fixture,
            ICustomizationComposer<CipherAttachment.MetaData> composer) =>
            base.ComposerAction(fixture, composer).With(d => d.ContainerName, (string)null);
    }

    public class MetaDataWithoutKey : MetaDataWithoutContainer
    {
        protected override IPostprocessComposer<CipherAttachment.MetaData> ComposerAction(IFixture fixture,
            ICustomizationComposer<CipherAttachment.MetaData> composer) =>
            base.ComposerAction(fixture, composer).Without(d => d.Key);
    }
}