using System;
using System.Collections;
using System.Threading;
using System.Threading.Tasks;
using MajacloudSdk.Internal;

namespace MajacloudSdk
{
    /// <summary>Project metadata (name, plan, services, config public key).</summary>
    public sealed class MajacloudProject
    {
        private readonly MajacloudHttp _http;

        public MajacloudProjectInfo Info { get; private set; }

        internal MajacloudProject(MajacloudHttp http)
        {
            _http = http;
        }

        public async Task<MajacloudResult<MajacloudProjectInfo>> GetAsync(CancellationToken cancellationToken = default)
        {
            var result = await _http.SendJsonAsync(new HttpRequest { Method = "GET", Path = MajacloudEndpoints.Project, Idempotent = true }, cancellationToken);
            if (!result.Ok) return MajacloudResult<MajacloudProjectInfo>.Fail(result.Error);
            Info = MajacloudProjectInfo.FromJson(result.Value.GetObject("project"));
            return MajacloudResult<MajacloudProjectInfo>.Success(Info);
        }

        public IEnumerator Get(Action<MajacloudResult<MajacloudProjectInfo>> callback) => MajacloudCoroutine.Run(GetAsync(), callback);
    }
}
