﻿using UnityEngine.Events;
using UnityEngine;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Collections;

public class Vrtcal
{
    [System.Serializable]
    public class _OnSdkEvent : UnityEvent<string> {};

    [System.Serializable]
    public class _OnBannerEvent : UnityEvent<int, string> {};

    [System.Serializable]
    public class _OnInterstitialEvent : UnityEvent<int, string> {};

    private static _OnSdkEvent _onSdkInitializedEvent = new _OnSdkEvent();
    public static _OnSdkEvent OnSdkInitializedEvent { get { return _onSdkInitializedEvent; } }

    private static _OnSdkEvent _onSdkFailedToInitializeEvent = new _OnSdkEvent();
    public static _OnSdkEvent OnSdkFailedToInitializeEvent { get { return _onSdkFailedToInitializeEvent; } }

    private static _OnBannerEvent _onBannerLoadedEvent = new _OnBannerEvent();
    public static _OnBannerEvent OnBannerLoadedEvent { get { return _onBannerLoadedEvent; } }

    private static _OnBannerEvent _onBannerFailedToLoadEvent = new _OnBannerEvent();
    public static _OnBannerEvent OnBannerFailedToLoadEvent { get { return _onBannerFailedToLoadEvent; } }

    private static _OnBannerEvent _onBannerClickedEvent = new _OnBannerEvent();
    public static _OnBannerEvent OnBannerClickedEvent { get { return _onBannerClickedEvent; } }

    private static _OnBannerEvent _onBannerWillPresentModalEvent = new _OnBannerEvent();
    public static _OnBannerEvent OnBannerWillPresentModalEvent { get { return _onBannerWillPresentModalEvent; } }

    private static _OnBannerEvent _onBannerDidDismissModalEvent = new _OnBannerEvent();
    public static _OnBannerEvent OnBannerDidDismissModalEvent { get { return _onBannerDidDismissModalEvent; } }

    private static _OnBannerEvent _onBannerVideoStartedEvent = new _OnBannerEvent();
    public static _OnBannerEvent OnBannerVideoStartedEvent { get { return _onBannerVideoStartedEvent; } }

    private static _OnBannerEvent _onBannerVideoCompletedEvent = new _OnBannerEvent();
    public static _OnBannerEvent OnBannerVideoCompletedEvent { get { return _onBannerVideoCompletedEvent; } }

    private static _OnInterstitialEvent _onInterstitialLoadedEvent = new _OnInterstitialEvent();
    public static _OnInterstitialEvent OnInterstitialLoadedEvent { get { return _onInterstitialLoadedEvent; } }

    private static _OnInterstitialEvent _onInterstitialFailedToLoadEvent = new _OnInterstitialEvent();
    public static _OnInterstitialEvent OnInterstitialFailedToLoadEvent
    {
        get { return _onInterstitialFailedToLoadEvent; }
    }

    private static _OnInterstitialEvent _onInterstitialShownEvent = new _OnInterstitialEvent();
    public static _OnInterstitialEvent OnInterstitialShownEvent { get { return _onInterstitialShownEvent; } }

    private static _OnInterstitialEvent _onInterstitialFailedToShowEvent = new _OnInterstitialEvent();
    public static _OnInterstitialEvent OnInterstitialFailedToShowEvent
    {
        get { return _onInterstitialFailedToShowEvent; }
    }

    private static _OnInterstitialEvent _onInterstitialClickedEvent = new _OnInterstitialEvent();
    public static _OnInterstitialEvent OnInterstitialClickedEvent { get { return _onInterstitialClickedEvent; } }

    private static _OnInterstitialEvent _onInterstitialDismissedEvent = new _OnInterstitialEvent();
    public static _OnInterstitialEvent OnInterstitialDismissedEvent { get { return _onInterstitialDismissedEvent; } }


    public static void InitSdk(int appId)
    {
        #if UNITY_ANDROID
            VrtcalAndroid.InitSdk(appId);
        #elif UNITY_IOS
            VrtcalIos.InitSdk(appId);
        #endif
    }
    
    public static void LoadTopBanner(int adUnitId, int width, int height)
    {
        #if UNITY_ANDROID
            VrtcalAndroid.LoadTopBanner(adUnitId, width, height);
        #elif UNITY_IOS
            VrtcalIos.LoadTopBanner(adUnitId, width, height);
        #endif
    }
    
    public static void LoadBottomBanner(int adUnitId, int width, int height)
    {
        #if UNITY_ANDROID
            VrtcalAndroid.LoadBottomBanner(adUnitId, width, height);
        #elif UNITY_IOS
            VrtcalIos.LoadBottomBanner(adUnitId, width, height);
        #endif
    }

    public static void LoadBanner(int adUnitId, int x, int y, int width, int height)
    {
        #if UNITY_ANDROID
            VrtcalAndroid.LoadBanner(adUnitId, x, y, width, height);
        #elif UNITY_IOS
            VrtcalIos.LoadBanner(adUnitId, x, y, width, height);
        #endif
    }

    public static void MoveBanner(int adUnitId, int x, int y)
    {
        #if UNITY_ANDROID
            VrtcalAndroid.MoveBanner(adUnitId, x, y);
        #elif UNITY_IOS
            VrtcalIos.MoveBanner(adUnitId, x, y);
        #endif
    }

    public static void DestroyBanner(int adUnitId)
    {
        #if UNITY_ANDROID
            VrtcalAndroid.DestroyBanner(adUnitId);
        #elif UNITY_IOS
            VrtcalIos.DestroyBanner(adUnitId);
        #endif
    }

    public static void LoadInterstitial(int adUnitId)
    {
        #if UNITY_ANDROID
            VrtcalAndroid.LoadInterstitial(adUnitId);
        #elif UNITY_IOS
            VrtcalIos.LoadInterstitial(adUnitId);
        #endif
    }

    public static void ShowInterstitial(int adUnitId)
    {
        #if UNITY_ANDROID
            VrtcalAndroid.ShowInterstitial(adUnitId);
        #elif UNITY_IOS
            VrtcalIos.ShowInterstitial(adUnitId);
        #endif
    }

    public static void DestroyInterstitial(int adUnitId)
    {
        #if UNITY_ANDROID
            VrtcalAndroid.DestroyInterstitial(adUnitId);
        #elif UNITY_IOS
            VrtcalIos.DestroyInterstitial(adUnitId);
        #endif
    }

    public static void SetPiiData(string piiDataType, string piiDataValue)
    {
        #if UNITY_ANDROID
            VrtcalAndroid.SetPiiData(piiDataType, piiDataValue);
        #elif UNITY_IOS
            VrtcalIos.SetPiiData(piiDataValue);
            VrtcalIos.SetPiiDataTypes(piiDataType);
        #endif
    }       

    //Log
    public static void Log(string message = "", [CallerMemberName] string caller = "", [CallerFilePath] string file = "") {
        Debug.Log("███ Vrtcal ███ " + file + " [" + caller + "] " + message);
    }
}
