// =============================================================================
// TudadaSDK Auth Types
//
// 인증 관련 API 타입 정의 (Login, CheckSession, GetUserInfo)
// =============================================================================

using System;

namespace Tudada
{
    /// <summary>
    /// 로그인 성공 결과
    ///
    /// wx.login의 응답 형태와 호환되며, Tudada 고유의 사용자 정보 자격증명
    /// (userInfoPayload/userInfoSignature)을 추가 제공한다.
    /// 게임 서버는 시크릿키로 자체 검증할 수 있다 (서버-to-서버 통신 불필요).
    /// </summary>
    [Serializable]
    public class LoginResult
    {
        /// <summary>
        /// 에러 메시지
        /// </summary>
        public string errMsg;

        /// <summary>
        /// 에러 코드
        /// </summary>
        public int errCode;

        /// <summary>
        /// 사용자 로그인 코드
        /// </summary>
        public string code;

        /// <summary>
        /// 사용자 고유 ID
        /// </summary>
        public string userId;

        /// <summary>
        /// 사용자 정보 자격증명 페이로드 (URL-encoded query string).
        /// 게임사 시크릿키로 자체 검증 가능한 서명된 사용자 정보.
        /// </summary>
        public string userInfoPayload;

        /// <summary>
        /// userInfoPayload에 대한 HMAC 서명 (게임사 시크릿키로 검증).
        /// </summary>
        public string userInfoSignature;
    }

    /// <summary>
    /// 세션 확인 결과
    /// </summary>
    [Serializable]
    public class CheckSessionResult
    {
        /// <summary>
        /// 에러 메시지
        /// </summary>
        public string errMsg;

        /// <summary>
        /// 에러 코드
        /// </summary>
        public int errCode;
    }

    /// <summary>
    /// 사용자 정보
    /// </summary>
    [Serializable]
    public class UserInfo
    {
        /// <summary>
        /// 사용자 닉네임
        /// </summary>
        public string nickName;

        /// <summary>
        /// 사용자 아바타 이미지 URL
        /// </summary>
        public string avatarUrl;

        /// <summary>
        /// 사용자 언어 설정 (호환용, 고정값 "KO")
        /// </summary>
        public string language;

        /// <summary>
        /// 성별 (0: 알 수 없음) - 호환용
        /// </summary>
        public int gender;

        /// <summary>
        /// 국가 코드 - 호환용
        /// </summary>
        public string country;

        /// <summary>
        /// 도시 - 호환용
        /// </summary>
        public string city;

        /// <summary>
        /// 지역/도 - 호환용
        /// </summary>
        public string province;
    }

    /// <summary>
    /// 사용자 정보 조회 결과
    ///
    /// 사용자 프로필(userInfo)과 게임 서버 검증용 자격증명
    /// (userInfoPayload/userInfoSignature)을 반환한다.
    /// 자격증명은 login 시점에 발급된 값과 동일.
    /// </summary>
    [Serializable]
    public class GetUserInfoResult
    {
        /// <summary>
        /// 에러 메시지
        /// </summary>
        public string errMsg;

        /// <summary>
        /// 에러 코드
        /// </summary>
        public int errCode;

        /// <summary>
        /// 사용자 정보 객체
        /// </summary>
        public UserInfo userInfo;

        /// <summary>
        /// 사용자 정보 자격증명 페이로드 (URL-encoded query string).
        /// 게임사 시크릿키로 자체 검증 가능한 서명된 사용자 정보.
        /// </summary>
        public string userInfoPayload;

        /// <summary>
        /// userInfoPayload에 대한 HMAC 서명 (게임사 시크릿키로 검증).
        /// </summary>
        public string userInfoSignature;
    }
}
