using FrostFS.SDK.ClientV2.Mappers.GRPC.Netmap;
using FrostFS.SDK.Cryptography;
using FrostFS.SDK.ModelsV2.Enums;
using Google.Protobuf;

namespace FrostFS.SDK.ClientV2.Mappers.GRPC;

public static class ContainerMapper
{
    public static Container.Container ToGrpcMessage(this ModelsV2.Container container)
    {
        return new Container.Container
        {
            BasicAcl = (uint)container.BasicAcl,
            PlacementPolicy = container.PlacementPolicy.ToGrpcMessage(),
            Nonce = ByteString.CopyFrom(container.Nonce.ToBytes())
        };
    }

    public static ModelsV2.Container ToModel(this Container.Container container)
    {
        var basicAclName = Enum.GetName(typeof(BasicAcl), container.BasicAcl);
        if (basicAclName is null)
        {
            throw new ArgumentException($"Unknown BasicACL rule. Value: '{container.BasicAcl}'.");
        }

        return new ModelsV2.Container(
            Enum.Parse<BasicAcl>(basicAclName),
            container.PlacementPolicy.ToModel()
        )
        {
            Nonce = container.Nonce.ToUuid(),
            Version = container.Version.ToModel()
        };
    }
}