using System.Collections.Generic;

namespace Selector.CLI
{
    class RootOptions
    {
        public const string Key = "Selector";

        /// <summary>
        /// Spotify client ID
        /// </summary>
        public string ClientId { get; set; }
        /// <summary>
        /// Spotify app secret
        /// </summary>
        public string ClientSecret { get; set; }
        public WatcherOptions WatcherOptions { get; set; } = new();
        public EqualityChecker Equality { get; set; } = EqualityChecker.Uri;
    }

    enum EqualityChecker
    {
        Uri, String
    }

    class WatcherOptions
    {
        public const string Key = "Watcher";

        public bool Enabled { get; set; } = true;
        public List<WatcherInstanceOptions> Instances { get; set; } = new();
    }

    class WatcherInstanceOptions
    {
        public const string Key = "Instances";

        public string Name { get; set; }
        public string AccessKey { get; set; }
        public string RefreshKey { get; set; }
        public int PollPeriod { get; set; } = 5000;
        public WatcherType Type { get; set; } = WatcherType.Player;
        public List<Consumers> Consumers { get; set; } = default;
#nullable enable
        public string? PlaylistUri { get; set; }
        public string? WatcherCollection { get; set; }
#nullable disable
    }

    enum WatcherType
    {
        Player, Playlist
    }

    enum Consumers
    {
        AudioFeatures
    }
}