//
//  BSUTypes.swift
//  UnityFramework
//
//  Created by Moin Hasan on 5/23/25.
//

// Opaque pointer types
public typealias BSUTypeRef = UnsafeRawPointer
public typealias BSUTypeErrorRef = UnsafeRawPointer
public typealias BSUTypeSettingsRef = UnsafeRawPointer
public typealias BSUTypeRequestOptionsRef = UnsafeRawPointer
public typealias BSUTypeMobileAdsClientRef = UnsafeRawPointer
public typealias BSUTypeInitializationStatusRef = UnsafeRawPointer
public typealias BSUTypeRewardedVideoAdRef = UnsafeRawPointer
public typealias BSUTypeRewardedVideoAdClientRef = UnsafeRawPointer
public typealias BSUTypeInterstitialRef = UnsafeRawPointer
public typealias BSUTypeInterstitialClientRef = UnsafeRawPointer
public typealias BSUTypeBannerRef = UnsafeRawPointer
public typealias BSUTypeBannerClientRef = UnsafeRawPointer
public typealias BSUTypeNativeAdRef = UnsafeRawPointer
public typealias BSUTypeNativeAdClientRef = UnsafeRawPointer

// Pointer-to-pointer types (for callbacks)
public typealias BSUTypeMobileAdsClientRefPointer = UnsafeMutablePointer<BSUTypeMobileAdsClientRef?>
public typealias BSUTypeRewardedVideoAdClientRefPointer = UnsafeMutablePointer<BSUTypeRewardedVideoAdClientRef?>
public typealias BSUTypeInterstitialClientRefPointer = UnsafeMutablePointer<BSUTypeInterstitialClientRef?>
public typealias BSUTypeBannerClientRefPointer = UnsafeMutablePointer<BSUTypeBannerClientRef?>
public typealias BSUTypeNativeAdClientRefPointer = UnsafeMutablePointer<BSUTypeNativeAdClientRef?>

// Callback function pointer types
public typealias BSUAdaptersInitializationCompleteCallback = @convention(c) (BSUTypeMobileAdsClientRefPointer?, BSUTypeInitializationStatusRef?) -> Void
public typealias BSUSDKInitializationCompleteCallback = @convention(c) (BSUTypeMobileAdsClientRefPointer?, Bool, BSUTypeErrorRef?) -> Void

public typealias BSUOnRewardedVideoLoadedCallback = @convention(c) (BSUTypeRewardedVideoAdClientRefPointer?) -> Void
public typealias BSUOnRewardedVideoErrorCallback = @convention(c) (BSUTypeRewardedVideoAdClientRefPointer?, BSUTypeErrorRef?) -> Void
public typealias BSUOnRewardedVideoClickedCallback = @convention(c) (BSUTypeRewardedVideoAdClientRefPointer?) -> Void
public typealias BSUOnRewardedVideoClosedCallback = @convention(c) (BSUTypeRewardedVideoAdClientRefPointer?) -> Void
public typealias BSUOnRewardedVideoAppearedCallback = @convention(c) (BSUTypeRewardedVideoAdClientRefPointer?) -> Void
public typealias BSUOnUserRewardEarnedCallback = @convention(c) (BSUTypeRewardedVideoAdClientRefPointer?, UnsafePointer<CChar>?, Int32) -> Void

public typealias BSUOnInterstitialDidLoadedCallback = @convention(c) (BSUTypeInterstitialClientRefPointer?) -> Void
public typealias BSUOnInterstitialDidFailCallback = @convention(c) (BSUTypeInterstitialClientRefPointer?, BSUTypeErrorRef?) -> Void
public typealias BSUOnInterstitialClickedCallback = @convention(c) (BSUTypeInterstitialClientRefPointer?) -> Void
public typealias BSUOnInterstitialDisappearCallback = @convention(c) (BSUTypeInterstitialClientRefPointer?) -> Void
public typealias BSUOnInterstitialDidShownCallback = @convention(c) (BSUTypeInterstitialClientRefPointer?) -> Void

public typealias BSUOnBannerDidLoadCallback = @convention(c) (BSUTypeBannerClientRefPointer?) -> Void
public typealias BSUOnBannerDidFailedCallback = @convention(c) (BSUTypeBannerClientRefPointer?, BSUTypeErrorRef?) -> Void
public typealias BSUOnAdClickedCallback = @convention(c) (BSUTypeBannerClientRefPointer?) -> Void
public typealias BSUOnBannerDidRefreshCallback = @convention(c) (BSUTypeBannerClientRefPointer?) -> Void
public typealias BSUOnBannerDidFailToRefreshCallback = @convention(c) (BSUTypeBannerClientRefPointer?, BSUTypeErrorRef?) -> Void
public typealias BSUOnBannerHideCallback = @convention(c) (BSUTypeBannerClientRefPointer?) -> Void
public typealias BSUOnBannerDisplayCallback = @convention(c) (BSUTypeBannerClientRefPointer?) -> Void

public typealias BSUOnNativeAdDidLoadCallback = @convention(c) (BSUTypeNativeAdClientRefPointer?) -> Void
public typealias BSUOnNativeAdDidFailCallback = @convention(c) (BSUTypeNativeAdClientRefPointer?, BSUTypeErrorRef?) -> Void
public typealias BSUOnNativeAdDidRecordImpressionCallback = @convention(c) (BSUTypeNativeAdClientRefPointer?) -> Void
public typealias BSUOnNativeAdDidPerformClickCallback = @convention(c) (BSUTypeNativeAdClientRefPointer?) -> Void
public typealias BSUOnNativeAdCloseCallback = @convention(c) (BSUTypeNativeAdClientRefPointer?) -> Void
