// AdTrue Unity Bridge — Objective-C++ bridge to expose Swift adapter to Unity C#

#import <Foundation/Foundation.h>

// Forward declaration of the Swift class
@interface AdTrueAdapter : NSObject
+ (void)setDebug:(BOOL)enabled;
@end

extern "C" {
    void _AdTrueMaxSetDebug(bool enabled) {
        // Use NSClassFromString to avoid hard linking the framework
        Class adapterClass = NSClassFromString(@"AdTrueMaxAdapter.AdTrueAdapter");
        if (!adapterClass) {
            adapterClass = NSClassFromString(@"AdTrueAdapter");
        }
        if (!adapterClass) {
            NSLog(@"[AdTrueUnityBridge] AdTrueAdapter class not found");
            return;
        }

        SEL selector = @selector(setDebug:);
        if (![adapterClass respondsToSelector:selector]) {
            NSLog(@"[AdTrueUnityBridge] setDebug: selector not found on %@", adapterClass);
            return;
        }

        // Dispatch via NSInvocation rather than performSelector:withObject:,
        // since setDebug: takes a primitive BOOL and performSelector:withObject:
        // only supports a single object-typed argument.
        NSMethodSignature *signature = [adapterClass methodSignatureForSelector:selector];
        NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
        invocation.target = adapterClass;
        invocation.selector = selector;
        BOOL boolEnabled = enabled;
        [invocation setArgument:&boolEnabled atIndex:2];
        [invocation invoke];
    }
}
