using System;
using UnityEngine;

namespace BilibiliMiniGame
{
    public static class BilibiliMiniGameScene
    {
        public const string Sidebar = "sidebar";
    }

    internal sealed class BilibiliMiniGameResponse
    {
        internal bool IsExist { get; }
        internal int ErrorCode { get; }
        internal string ErrorMessage { get; }

        internal BilibiliMiniGameResponse(bool isExist, int errorCode, string errorMessage)
        {
            IsExist = isExist;
            ErrorCode = errorCode;
            ErrorMessage = errorMessage;
        }
    }

    [Serializable]
    public sealed class BilibiliMiniGameError
    {
        [SerializeField] private int errCode;
        [SerializeField] private string errMsg;

        public int ErrorCode => errCode;
        public string ErrorMessage => errMsg;

        internal BilibiliMiniGameError(int errorCode, string errorMessage)
        {
            errCode = errorCode;
            errMsg = errorMessage;
        }

        public override string ToString()
        {
            return $"[{errCode}] {errMsg}";
        }
    }

    public readonly struct BilibiliMiniGameRequest
    {
        internal static readonly BilibiliMiniGameRequest None = new BilibiliMiniGameRequest(null);

        private readonly string requestId;

        internal BilibiliMiniGameRequest(string requestId)
        {
            this.requestId = requestId;
        }

        public bool IsValid => !string.IsNullOrEmpty(requestId);

        public bool BL_Cancel()
        {
            return IsValid && BilibiliMiniGameBridge.BL_Cancel(requestId);
        }
    }
}
