using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc.Rendering; namespace BTCPayServer.Models.StoreViewModels { public class DerivationSchemeViewModel { class Format { public string Name { get; set; } public string Value { get; set; } } public DerivationSchemeViewModel() { var btcPay = new Format { Name = "BTCPay", Value = "BTCPay" }; DerivationSchemeFormat = btcPay.Value; DerivationSchemeFormats = new SelectList(new Format[] { btcPay, new Format { Name = "Electrum", Value = "Electrum" }, }, nameof(btcPay.Value), nameof(btcPay.Name), btcPay); } public string DerivationScheme { get; set; } public List<(string KeyPath, string Address)> AddressSamples { get; set; } = new List<(string KeyPath, string Address)>(); [Display(Name = "Derivation Scheme format")] public string DerivationSchemeFormat { get; set; } [Display(Name = "Crypto currency")] public string CryptoCurrency { get; set; } public bool Confirmation { get; set; } public SelectList CryptoCurrencies { get; set; } public SelectList DerivationSchemeFormats { get; set; } public string ServerUrl { get; set; } public void SetCryptoCurrencies(ExplorerClientProvider explorerProvider, string selectedScheme) { var choices = explorerProvider.GetAll().Select(o => new Format() { Name = o.Item1.CryptoCode, Value = o.Item1.CryptoCode }).ToArray(); var chosen = choices.FirstOrDefault(f => f.Name == selectedScheme) ?? choices.FirstOrDefault(); CryptoCurrencies = new SelectList(choices, nameof(chosen.Value), nameof(chosen.Name), chosen); CryptoCurrency = chosen.Name; } } }