using System.Collections.Specialized;
using System.Net;

using YandexMusic.API.Common;
using YandexMusic.API.Models.Common;
using YandexMusic.API.Models.Landing.Entity.Entities.Context;
using YandexMusic.API.Models.Library;
using YandexMusic.API.Requests.Common;
using YandexMusic.API.Requests.Common.Attributes;

namespace YandexMusic.API.Requests.Library;

[YApiRequest(WebRequestMethods.Http.Get, "/users/{uid}/contexts")]
public class YGetLibraryRecentlyListenedBuilder : YRequestBuilder<YResponse<YRecentlyListenedContext>,
    (IEnumerable<YPlayContextType> contextTypes, int trackCount, int contextCount)>
{
    public YGetLibraryRecentlyListenedBuilder(YandexMusicApi yandex, AuthStorage auth) : base(yandex, auth)
    {
    }

    protected override NameValueCollection GetQueryParams((IEnumerable<YPlayContextType> contextTypes, int trackCount, int contextCount) tuple)
    {
        return new NameValueCollection {
            { "trackCount", tuple.trackCount.ToString() },
            { "contextCount", tuple.contextCount.ToString() },
            { "types", string.Join(",", tuple.contextTypes.Select(x => x.ToString().ToLowerInvariant())) }
        };
    }

    protected override Dictionary<string, string> GetSubstitutions((IEnumerable<YPlayContextType> contextTypes, int trackCount, int contextCount) tuple)
    {
        return new Dictionary<string, string> {
            { "uid", storage.User.Uid }
        };
    }
}