#nullable enable
using System;

namespace IGP.UnitySDK.GameKit
{
    [Serializable]
    public sealed class IGPUserProfile
    {
        public IGPProfileAvatarSelection? avatar;
        public string? avatarUrl;
        public IGPProfileAvatarFrameSelection? avatarFrame;
        public IGPProfileBackgroundSelection? background;
        public string? backgroundUrl;
        public string? bio;
        public int? nameChanges;
        public string? lastChangedAt;
        public string? lastActiveAt;
        public IGPPendingNicknameReview? pendingNicknameReview;
    }

    [Serializable]
    public sealed class IGPProfileAvatarSelection
    {
        public string assetKey = string.Empty;
        public string displayName = string.Empty;
        public string? imageUrl;
    }

    [Serializable]
    public sealed class IGPProfileAvatarFrameSelection
    {
        public string assetKey = string.Empty;
        public string displayName = string.Empty;
        public string? imageUrl;
        public IGPAvatarFrameRenderConfig? renderConfig;
    }

    [Serializable]
    public sealed class IGPProfileBackgroundSelection
    {
        public string assetKey = string.Empty;
        public string displayName = string.Empty;
        public string? imageUrl;
    }

    [Serializable]
    public sealed class IGPAvatarFrameRenderConfig
    {
        public int version;
        public string kind = string.Empty;
        public IGPAvatarFrameRenderSize canvas = new IGPAvatarFrameRenderSize();
        public IGPAvatarFrameRenderRect avatarRect = new IGPAvatarFrameRenderRect();
        public IGPAvatarFrameRenderMask avatarMask = new IGPAvatarFrameRenderMask();
        public IGPAvatarFrameRenderLayers layers = new IGPAvatarFrameRenderLayers();
    }

    [Serializable]
    public class IGPAvatarFrameRenderSize
    {
        public int width;
        public int height;
    }

    [Serializable]
    public sealed class IGPAvatarFrameRenderRect : IGPAvatarFrameRenderSize
    {
        public int x;
        public int y;
    }

    [Serializable]
    public sealed class IGPAvatarFrameRenderMask
    {
        public string type = string.Empty;
        public int? radius;
        public string? url;
    }

    [Serializable]
    public sealed class IGPAvatarFrameRenderLayers
    {
        public IGPAvatarFrameRenderImageLayer? back;
        public IGPAvatarFrameRenderImageLayer? front;
        public IGPAvatarFrameRenderImageLayer? poster;
        public IGPAvatarFrameRenderAnimationLayer? effect;
    }

    [Serializable]
    public sealed class IGPAvatarFrameRenderImageLayer
    {
        public string type = string.Empty;
        public string url = string.Empty;
    }

    [Serializable]
    public sealed class IGPAvatarFrameRenderAnimationLayer
    {
        public string type = string.Empty;
        public string url = string.Empty;
        public bool? loop;
        public int? durationMs;
    }

    [Serializable]
    public sealed class IGPPendingNicknameReview
    {
        public string id = string.Empty;
        public string status = string.Empty;
        public string requestedNickname = string.Empty;
        public string createdAt = string.Empty;
        public string? reviewedAt;
    }
}
