using System; using System.Collections.Generic; using System.Linq; using Newtonsoft.Json; namespace TINK.Model.Services.CopriApi.ServerUris { [JsonObject(MemberSerialization.OptIn)] sealed public class CopriServerUriList { /// /// Holds the rest resource root name. /// public const string REST_RESOURCE_ROOT = "APIjsonserver"; /// Holds the URL of the TINK/Konrad test server. public const string TINK_DEVEL = @"https://tinkwwp.copri-bike.de/APIjsonserver"; /// Holds the URL the TINK/Konrad productive server. public const string TINK_LIVE = @"https://app.tink-konstanz.de/APIjsonserver"; /// Holds the URL the Sharee server. public const string SHAREE_DEVEL = @"https://shareeapp-primary.copri-bike.de/APIjsonserver"; /// Holds the URL the Sharee server. public const string SHAREE_LIVE = @"https://shareeapp-primary.copri.eu/APIjsonserver"; /// Constructs default uri list. public CopriServerUriList(Uri activeUri = null) : this( new List { new Uri(SHAREE_LIVE), new Uri(TINK_LIVE), new Uri(SHAREE_DEVEL), new Uri(TINK_DEVEL) }.ToArray(), activeUri ?? new Uri(SHAREE_LIVE)) // Default URi which is used after install of app { } /// Constructs uris object. /// Object to copy from. public CopriServerUriList(CopriServerUriList p_oSource) : this( p_oSource.Uris.ToArray(), p_oSource.ActiveUri) { } /// Constructs a valid uris object. /// Known uris. /// Zero based index of active uri. /// Uri of the development server. public CopriServerUriList( Uri[] uris, Uri p_oActiveUri) { if (uris == null || uris.Length < 1) { throw new ArgumentException($"Can not construct {typeof(CopriServerUriList)}- object. Array of uris must not be null and contain at least one element."); } if (!uris.Contains(p_oActiveUri)) { throw new ArgumentException($"Active uri {p_oActiveUri} not contained in ({string.Join("; ", uris.Select(x => x.AbsoluteUri))})."); } Uris = new List(uris); ActiveUri = p_oActiveUri; } /// Gets the active uri. [JsonProperty] public Uri ActiveUri { get; } /// Gets the active uri. #if USCSHARP9 public static Uri DevelopUri => new (TINK_DEVEL); #else public static Uri DevelopUri => new Uri(TINK_DEVEL); #endif /// Gets the known uris. [JsonProperty] public IList Uris { get; } /// Gets the default uri which is active after first installation. public static Uri DefaultActiveUri { get { return new CopriServerUriList().ActiveUri; } } } }