using System;
using Foundation;
using ObjCRuntime;

namespace NfcLock.Ios.Binding
{
	// @interface NFCManager
	[DisableDefaultCtor]
	[BaseType (typeof (NSObject))]
	public interface NFCManager
	{
		// @property (readonly, nonatomic, strong, class) NFCManager * _Nonnull shared;
		[Static]
		[Export ("shared", ArgumentSemantic.Strong)]
		NFCManager Shared { get; }

		// -(void)chargingRes:(NSString * _Nonnull)res level:(id)level;
		[Export ("chargingRes:level:")]
		void ChargingRes (string res, NSObject level);

		// -(void)controllingRes:(NSString * _Nonnull)res progress:(id)progress ctrl:(NSString * _Nonnull)ctrl;
		[Export ("controllingRes:progress:ctrl:")]
		void ControllingRes (string res, NSObject progress, string ctrl);

		// -(void)customDataRes:(NSString * _Nonnull)res config:(NFCSDKCustomDataConfig * _Nonnull)config data:(NSData * _Nullable)data;
		[Export ("customDataRes:config:data:")]
		void CustomDataRes (string res, NSObject config, [NullAllowed] NSData data);

		// -(void)discoveredId:(NSString * _Nonnull)id isNew:(id)isNew rssi:(id)rssi;
		[Export ("discoveredId:isNew:rssi:")]
		void DiscoveredId (string id, NSObject isNew, NSObject rssi);

		// -(void)finished;
		[Export ("finished")]
		void Finished ();

		// -(void)setKeyRes:(NSString * _Nonnull)res password:(NSString * _Nonnull)password;
		[Export ("setKeyRes:password:")]
		void SetKeyRes (string res, string password);

		// -(void)connectTagErrorError:(id)error;
		[Export ("connectTagErrorError:")]
		void ConnectTagErrorError (NSObject error);

		// -(void)sendCommandErrorError:(id)error;
		[Export ("sendCommandErrorError:")]
		void SendCommandErrorError (NSObject error);

		// -(void)notNfcA;
		[Export ("notNfcA")]
		void NotNfcA ();

		// -(void)sessionInvalidWithErrorError:(id)error;
		[Export ("sessionInvalidWithErrorError:")]
		void SessionInvalidWithErrorError (NSObject error);

		// -(void)setChargingCallback:(void (^ _Nonnull)(NSString * _Nonnull, int))cb;
		[Export ("setChargingCallback:")]
		void SetChargingCallback (Action<NSString, int> cb);

		// -(void)setControllingCallback:(void (^ _Nonnull)(NSString * _Nonnull, int, NSString * _Nonnull))cb;
		[Export ("setControllingCallback:")]
		void SetControllingCallback (Action<NSString, int, NSString> cb);

		// -(void)setCustomDataCallback:(void (^ _Nonnull)(NSString * _Nonnull, NFCSDKCustomDataConfig * _Nonnull, NSData * _Nullable))cb;
		[Export ("setCustomDataCallback:")]
		void SetCustomDataCallback (Action<NSString, NSObject, NSData> cb);

		// -(void)setDeviceDiscoveredCallback:(void (^ _Nonnull)(NSString * _Nonnull, int, int))cb;
		[Export ("setDeviceDiscoveredCallback:")]
		void SetDeviceDiscoveredCallback (Action<NSString, int, int> cb);

		// -(void)setOperationFinishedCallback:(void (^ _Nonnull)(void))cb;
		[Export ("setOperationFinishedCallback:")]
		void SetOperationFinishedCallback (Action cb);

		// -(void)setSetKeyCallback:(void (^ _Nonnull)(NSString * _Nonnull, NSString * _Nonnull))cb;
		[Export ("setSetKeyCallback:")]
		void SetSetKeyCallback (Action<NSString, NSString> cb);

		// -(void)setScanDidStartCallback:(void (^ _Nonnull)(void))cb;
		[Export ("setScanDidStartCallback:")]
		void SetScanDidStartCallback (Action cb);

		// -(void)setScanDidEndCallback:(id)cb;
		[Export ("setScanDidEndCallback:")]
		void SetScanDidEndCallback (Action<bool, string> cb);

		// -(void)clearAllCallbacks;
		[Export ("clearAllCallbacks")]
		void ClearAllCallbacks ();

		// -(void)lockWith:(NSString * _Nonnull)password;
		[Export ("lockWith:")]
		void LockWith (string password);

		// -(void)unlockWith:(NSString * _Nonnull)password;
		[Export ("unlockWith:")]
		void UnlockWith (string password);

		// -(void)startScanWith:(NSString * _Nonnull)message;
		[Export ("startScanWith:")]
		void StartScanWith (string message);

		// -(void)endScan;
		[Export ("endScan")]
		void EndScan ();

		// -(void)endScanWith:(NSString * _Nonnull)errorMessage;
		[Export ("endScanWith:")]
		void EndScanWith (string errorMessage);

		// -(void)showTipsWith:(NSString * _Nonnull)message;
		[Export ("showTipsWith:")]
		void ShowTipsWith (string message);
	}
}
