// =============================================================================
// TudadaSDK Ad Types
//
// 광고 관련 API 타입 정의 (RewardedVideoAd)
// =============================================================================

using System;

namespace Tudada
{

    /// <summary>
    /// 광고 로드 결과
    /// </summary>
    [Serializable]
    public class AdLoadResult
    {
        /// <summary>
        /// 에러 메시지
        /// </summary>
        public string errMsg;
    }

    /// <summary>
    /// 광고 표시 결과
    /// </summary>
    [Serializable]
    public class AdShowResult
    {
        /// <summary>
        /// 에러 메시지
        /// </summary>
        public string errMsg;
    }

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

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

    /// <summary>
    /// 광고 닫기 결과
    /// </summary>
    [Serializable]
    public class AdCloseResult
    {
        /// <summary>
        /// 광고 시청 완료 여부 (보상 지급 기준)
        /// </summary>
        public bool isEnded;
    }

    /// <summary>
    /// 보상형 광고 통합 표시 결과 (load + show 일괄 처리)
    /// </summary>
    [Serializable]
    public class ShowRewardedAdResult
    {
        /// <summary>
        /// 리워드 완료 여부 (보상 지급 기준)
        /// </summary>
        public bool isEnded;
    }

    // =========================================================================
    // 통합 리워드 슬롯 (GetRewardedAdSlots / GetRewardedAdSlot)
    //
    // 각 슬롯은 slotId, action(REWARD_VIDEO/BANNER/SHARE), slotData(렌더용)로 구성.
    // 게임은 slotData로 렌더링하고 사용자 탭 시 ShowRewardedAd(slotId)로 실행합니다.
    // 액션 실행에 필요한 플랫폼 내부 데이터는 노출되지 않습니다.
    // =========================================================================

    /// <summary>
    /// 게임 렌더용 슬롯 데이터
    /// </summary>
    [Serializable]
    public class RewardSlotData
    {
        /// <summary>슬롯 이미지 URL (게임이 직접 렌더링)</summary>
        public string imageUrl;

        /// <summary>슬롯 제목 (선택)</summary>
        public string title;

        /// <summary>슬롯 만료 시각 (Unix timestamp, ms). 0이면 미설정.</summary>
        public long expiresAt;
    }

    /// <summary>
    /// 게임-대면 리워드 슬롯.
    /// action 값: "REWARD_VIDEO" | "BANNER" | "SHARE"
    /// </summary>
    [Serializable]
    public class RewardedAdSlot
    {
        /// <summary>슬롯 식별자</summary>
        public string slotId;

        /// <summary>슬롯 액션 유형 ("REWARD_VIDEO" | "BANNER" | "SHARE")</summary>
        public string action;

        /// <summary>
        /// 게임 렌더용 슬롯 데이터.
        /// 기본 슬롯(REWARD_VIDEO/SHARE)에서는 <c>null</c> 일 수 있다 — 접근 전 null 체크 필수.
        /// </summary>
        public RewardSlotData slotData;
    }

    /// <summary>
    /// 리워드 슬롯 전체 목록 결과
    /// </summary>
    [Serializable]
    public class GetRewardedAdSlotsResult
    {
        public RewardedAdSlot[] slots;
    }

    /// <summary>
    /// 단일 리워드 슬롯 결과
    /// </summary>
    [Serializable]
    public class GetRewardedAdSlotResult
    {
        public RewardedAdSlot slot;
    }

    // =========================================================================
    // Banner Ad (슬롯 모델 — bannerId == 슬롯 이름) — [Obsolete] 통합 리워드 슬롯으로 대체
    //
    // 게임이 정의한 슬롯에 광고가 매칭되면 imageUrl을 받아 자체 렌더링하고,
    // 사용자 탭 시 RunBannerAction을 호출해 액션 처리를 SDK에 위임합니다.
    // 보상 등 후처리는 게임 내부에서 수행합니다.
    // =========================================================================

    /// <summary>
    /// 배너 광고 데이터.
    /// bannerId는 게임이 정의한 슬롯 이름을 겸합니다.
    /// </summary>
    [Obsolete("RewardedAdSlot 을 사용하세요.")]
    [Serializable]
    public class Banner
    {
        /// <summary>
        /// 슬롯 이름을 겸하는 배너 식별자
        /// </summary>
        public string bannerId;

        /// <summary>
        /// 배너 이미지 URL (게임이 직접 렌더링)
        /// </summary>
        public string imageUrl;

        /// <summary>
        /// 배너 만료 시각 (Unix timestamp, ms). 0이면 미설정.
        /// </summary>
        public long expiresAt;
    }

    /// <summary>
    /// 활성 배너 ID(=슬롯 이름) 목록 결과
    /// </summary>
    [Obsolete("GetRewardedAdSlotsResult 을 사용하세요.")]
    [Serializable]
    public class GetAvailableBannerIdsResult
    {
        public string[] bannerIds;
    }

    /// <summary>
    /// 슬롯별 배너 데이터 결과
    /// </summary>
    [Obsolete("GetRewardedAdSlotResult 을 사용하세요.")]
    [Serializable]
    public class GetBannerResult
    {
#pragma warning disable CS0618
        public Banner banner;
#pragma warning restore CS0618
    }
}
