#nullable enable
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Pipes;
using System.Threading;
using System.Threading.Tasks;

using IGP.UnitySDK.Models;
using Newtonsoft.Json;

namespace IGP.UnitySDK
{
    public sealed partial class IGPDesktopSessionClient
    {

        public async Task<IGPAntiAddictionStatus> GetDesktopAntiAddictionStatusAsync(
            CancellationToken cancellationToken = default)
        {
            var result = await SendCommandAsync(
                IGPDesktopSessionCommandType.GetDesktopAntiAddictionStatus,
                cancellationToken);

            return ParseCommandPayload(
                result.ContentJson,
                () => CurrentSession?.AntiAddictionStatus ?? new IGPAntiAddictionStatus());
        }

        public async Task<IGPAntiAddictionRealNameWebSession> CreateDesktopAntiAddictionRealNameUrlAsync(
            int? appId = null,
            CancellationToken cancellationToken = default)
        {
            var payload = appId.HasValue && appId.Value > 0
                ? JsonConvert.SerializeObject(new
                {
                    appId = appId.Value,
                })
                : null;

            var result = await SendCommandAsync(
                IGPDesktopSessionCommandType.CreateDesktopAntiAddictionRealNameUrl,
                cancellationToken,
                contentJson: payload);

            return ParseCommandPayload(
                result.ContentJson,
                () => new IGPAntiAddictionRealNameWebSession());
        }
    }
}
