using UnityEngine;
using GoogleMobileAds.Api;
using System;
using UnityEngine.SceneManagement;

public class AdManager : Singleton<AdManager>
{
    private RewardedInterstitialAd rewardedInterstitialAd;
    private string adUnitId = "ca-app-pub-3940256099942544/5354046379"; // 테스트 광고 ID

    protected override void Awake()
    {
        base.Awake();  
        
        // Google Mobile Ads 초기화
        MobileAds.Initialize(initStatus =>
        {
            LoadRewardedInterstitialAd();   // 광고 로드
        });
        
    }
    
    protected override void OnSceneLoaded(Scene scene, LoadSceneMode mode)
    {
        
    }

    // 보상형 전면 광고 로드
    public void LoadRewardedInterstitialAd()
    {
        if (rewardedInterstitialAd != null)
        {
            rewardedInterstitialAd.Destroy();  // 기존 광고 객체 해제
            rewardedInterstitialAd = null;
        }
        
        AdRequest request = new AdRequest();

        RewardedInterstitialAd.Load(adUnitId, request,
            (RewardedInterstitialAd ad, LoadAdError error) =>
            {
                if (error != null)
                {
                    Debug.LogError("보상형 전면 광고 로드 실패: " + error);
                    return;
                }

                rewardedInterstitialAd = ad;

                // 광고 종료 이벤트 설정
                rewardedInterstitialAd.OnAdFullScreenContentClosed += HandleAdClosed;
            });
    }

    // 보상형 전면 광고 실행
    public void ShowRewardedInterstitialAd()
    {
        if (rewardedInterstitialAd != null && rewardedInterstitialAd.CanShowAd())
        {
            rewardedInterstitialAd.Show((Reward reward) =>  //서버에서 500코인을 고정으로 반환하기 때문에 reward는 사용하지 않음.
            {
                // 코인 지급 로직
                GrantReward();
            });
        }
        else
        {
            Debug.Log("보상형 전면 광고가 아직 로드되지 않았습니다.");
        }
    }

    // 광고 닫힘 이벤트 처리
    private void HandleAdClosed()
    {
        LoadRewardedInterstitialAd(); // 광고가 닫힌 후 다시 로드
    }

    // 코인 지급 함수
    private void GrantReward()
    {
        NetworkManager.Instance.WatchAdForCoins((coinsAdded) =>
        {
            // UI 업데이트
            GameManager.Instance.panelManager.UpdateCoinsPanelUI(coinsAdded);
        }, () =>
        {
            Debug.Log("광고 시청 후 코인 추가 실패");
        });
    }
}