using System.Net;
using YandexMusic.API.Common.Providers;
using YandexMusic.API.Models.Account;
using YandexMusic.API.Requests.Common;

namespace YandexMusic.API.Common;

/// <summary>
/// Хранилище данных пользователя
/// </summary>
public class AuthStorage
{
    /// <summary>
    /// Http-контекст
    /// </summary>
    public HttpContext Context { get; }

    /// <summary>
    /// Флаг авторизации
    /// </summary>
    public bool IsAuthorized { get; internal set; }

    /// <summary>
    /// Идентификатор устройства
    /// </summary>
    public string DeviceId { get; set; } = "csharp";

    /// <summary>
    /// Токен авторизации
    /// </summary>
    public string Token { get; internal set; }

    /// <summary>
    /// Аккаунт
    /// </summary>
    public YAccount User { get; set; }

    /// <summary>
    /// Провайдер запросов
    /// </summary>
    public IRequestProvider Provider { get; }

    /// <summary>
    /// Токен доступа
    /// </summary>
    public YAccessToken AccessToken { get; set; }

    internal YAuthToken AuthToken { get; set; }

    /// <summary>
    /// Конструктор
    /// </summary>
    public AuthStorage(IRequestProvider provider)
    {
        User = new YAccount();
        Context = new HttpContext();
        Provider = provider;
    }

    /// <summary>
    /// Конструктор
    /// </summary>
    public AuthStorage()
    {
        User = new YAccount();
        Context = new HttpContext();
        Provider = new DefaultRequestProvider(this);
    }

    /// <summary>
    /// Установка прокси для пользователия
    /// </summary>
    /// <param name="proxy">Прокси</param>
    public void SetProxy(IWebProxy proxy)
    {
        Context.WebProxy = proxy;
    }


}