// =============================================================================
// TudadaSDK CheckFeature Types
//
// 기능 지원 여부 확인 API 타입 정의
// =============================================================================

using System;

namespace Tudada
{
    // ============================================================
    // CheckFeature Status
    // ============================================================

    /// <summary>
    /// 기능 미지원 사유
    /// </summary>
    public enum CheckFeatureStatus
    {
        /// <summary>
        /// 기능 지원됨
        /// </summary>
        supported,

        /// <summary>
        /// SDK에 존재하지 않는 API
        /// </summary>
        unknown_api,

        /// <summary>
        /// 앱 버전 업데이트 필요
        /// </summary>
        version_required,

        /// <summary>
        /// 플랫폼 미지원
        /// </summary>
        platform_unsupported,

        /// <summary>
        /// 디바이스 미지원
        /// </summary>
        device_unsupported,

        /// <summary>
        /// 권한 거부
        /// </summary>
        permission_denied
    }

    // ============================================================
    // CheckFeature Result Types
    // ============================================================

    /// <summary>
    /// checkFeature 결과
    /// </summary>
    [Serializable]
    public class CheckFeatureResult
    {
        /// <summary>
        /// 에러 메시지
        /// </summary>
        public string errMsg;

        /// <summary>
        /// 기능 지원 여부
        /// </summary>
        public bool supported;

        /// <summary>
        /// 미지원 사유
        /// </summary>
        public string status;

        /// <summary>
        /// 확인한 API 이름
        /// </summary>
        public string apiName;

        /// <summary>
        /// 상세 설명
        /// </summary>
        public string detail;

        /// <summary>
        /// status 문자열을 enum으로 변환
        /// </summary>
        public CheckFeatureStatus StatusEnum
        {
            get
            {
                if (Enum.TryParse<CheckFeatureStatus>(status, out var result))
                    return result;
                return supported ? CheckFeatureStatus.supported : CheckFeatureStatus.platform_unsupported;
            }
        }
    }
}
