public async Task <CredentialViewModel> Assemble(CredentialRecord credentialRecord)
        {
            if (credentialRecord == null)
            {
                return(null);
            }

            var context = await _agentContextProvider.GetContextAsync();

            CredentialViewModel credential = _scope.Resolve <CredentialViewModel>(new NamedParameter("credential", credentialRecord));

            var credentialDefinitionId = CredentialDefinitionId.Parse(credentialRecord.CredentialDefinitionId);

            credential.CredentialName = credentialDefinitionId.Tag;
            var connectionRecord = await _connectionService.GetAsync(context, credentialRecord.ConnectionId);

            credential.CredentialSubtitle = connectionRecord.Alias.Name;
            credential.IssuedAt           = connectionRecord.CreatedAtUtc.HasValue ? connectionRecord.CreatedAtUtc.Value.ToLocalTime() : (DateTime?)null;
            if (credentialRecord.State == CredentialState.Offered)
            {
                var attributes = new List <CredentialAttribute>();
                credential.Attributes = attributes;
                foreach (var credentialPreviewAttribute in credentialRecord.CredentialAttributesValues)
                {
                    var attribute = new CredentialAttribute {
                        Name = credentialPreviewAttribute.Name, Value = credentialPreviewAttribute.Value.ToString(), Type = "Text"
                    };
                    attribute.Type  = attribute.Value != null && (attribute.Value.ToString().StartsWith("data:image/jpeg;base64") || attribute.Value.ToString().StartsWith("data:image/png;base64")) ? "Image" : "Text";
                    attribute.Image = attribute.Value != null && (attribute.Value.ToString().StartsWith("data:image/jpeg;base64") || attribute.Value.ToString().StartsWith("data:image/png;base64")) ? ImageSource.FromStream(() => new MemoryStream(Convert.FromBase64String(attribute.Value.ToString().Replace("data:image/jpeg;base64,", "").Replace("data:image/png;base64,", "")))) : null;
                    attributes.Add(attribute);
                }
            }

            return(credential);
        }
        public IList <CredentialRecord> Filter(IList <CredentialRecord> credentialRecords)
        {
            if (credentialRecords == null)
            {
                throw new ArgumentNullException(nameof(credentialRecords));
            }

            IList <CredentialRecord> filteredCredentialRecords = new List <CredentialRecord>();

            foreach (CredentialRecord credentialRecord in credentialRecords)
            {
                if (ContainsAttributeName(credentialRecord))
                {
                    if (_schemaIds.Count > 0 && !_schemaIds.Contains(credentialRecord.SchemaId))
                    {
                        continue;
                    }
                    if (_schemaNames.Count > 0 || _schemaVersions.Count > 0 || _issuerDids.Count > 0)
                    {
                        SchemaId schemaId = SchemaId.Parse(credentialRecord.SchemaId);
                        if (_schemaNames.Count > 0 && !_schemaNames.Contains(schemaId.Name))
                        {
                            continue;
                        }
                        if (_schemaVersions.Count > 0 && !_schemaVersions.Contains(schemaId.Version))
                        {
                            continue;
                        }
                        if (_schemaIssuerDids.Count > 0 && !_schemaIssuerDids.Contains(schemaId.Did))
                        {
                            continue;
                        }
                    }
                    if (_issuerDids.Count > 0 && !_issuerDids.Contains(CredentialDefinitionId.Parse(credentialRecord.CredentialDefinitionId).Did))
                    {
                        continue;
                    }
                    if (_credentialDefinitionIds.Count > 0 && !_credentialDefinitionIds.Contains(credentialRecord.CredentialDefinitionId))
                    {
                        continue;
                    }
                    if (_attributeValues.Count > 0)
                    {
                        bool found = false;
                        foreach (AttributeValue attributeValue in _attributeValues)
                        {
                            foreach (CredentialPreviewAttribute credentialPreviewAttribute in credentialRecord.CredentialAttributesValues)
                            {
                                if (credentialPreviewAttribute.Name == attributeValue.Name && credentialPreviewAttribute.Value.ToString() == attributeValue.Value)
                                {
                                    found = true;
                                    break;
                                }
                            }
                            if (found)
                            {
                                break;
                            }
                        }
                        if (!found)
                        {
                            continue;
                        }
                    }

                    filteredCredentialRecords.Add(credentialRecord);
                }
            }

            return(filteredCredentialRecords);
        }