#nullable enable
using System;

namespace IGP.UnitySDK.Models
{
    [Serializable]
    public sealed class IGPPhoneCodeSendResult
    {
        public bool Succeeded { get; internal set; }
        public string DevelopmentCode { get; internal set; } = string.Empty;
        public bool IsTestAccount { get; internal set; }
    }

    [Serializable]
    public sealed class IGPUserProfile
    {
        public string Id { get; internal set; } = string.Empty;
        public string Nickname { get; internal set; } = string.Empty;
        public int Discriminator { get; internal set; }
        public string DisplayTag { get; internal set; } = string.Empty;
        public string AvatarUrl { get; internal set; } = string.Empty;
        public string AvatarFrameUrl { get; internal set; } = string.Empty;

        internal IGPUserProfile Clone()
        {
            return new IGPUserProfile
            {
                Id = Id,
                Nickname = Nickname,
                Discriminator = Discriminator,
                DisplayTag = DisplayTag,
                AvatarUrl = AvatarUrl,
                AvatarFrameUrl = AvatarFrameUrl,
            };
        }
    }

    [Serializable]
    public sealed class IGPPlayerProfileSummary
    {
        public string Id { get; internal set; } = string.Empty;
        public string Nickname { get; internal set; } = string.Empty;
        public string AvatarUrl { get; internal set; } = string.Empty;
        public string AvatarFrameUrl { get; internal set; } = string.Empty;
    }

    [Serializable]
    public sealed class IGPUserSession
    {
        public IGPUserProfile Profile { get; }

        internal IGPUserSession(IGPUserProfile profile)
        {
            Profile = profile?.Clone() ?? throw new ArgumentNullException(nameof(profile));
        }
    }
}
