export interface NfcPlugin {
    /**
     * Check if NFC is enabled (Android) or available (iOS/Web).
     */
    isEnabled(): Promise<IsEnabledResult>;
    /**
     * Open NFC settings (Android) or app settings (iOS) or shows guidance (Web).
     */
    openSettings(): Promise<void>;
    /**
     * Register a callback that will be invoked when NFC status changes.
     */
    addListener(eventName: "nfcStatusChanged", listenerFunc: (status: NfcStatusChangedEvent) => void): Promise<PluginListenerHandle>;
    /**
     * Start a read session and register a callback that will be invoked when NFC tags are detected.
     */
    startScanSession(options?: StartScanSessionOptions): Promise<void>;
    /**
     * Stop the current scan session.
     */
    stopScanSession(): Promise<void>;
    /**
     * Register a callback that will be invoked when NFC tags are detected.
     */
    addListener(eventName: "tagDetected", listenerFunc: (tag: TagDetectedEvent) => void): Promise<PluginListenerHandle>;
    /**
     * Write an NDEF message to an NFC tag.
     */
    write(options: WriteOptions): Promise<void>;
    /**
     * Make an NFC tag read-only. After calling this method, it is no longer possible to write data to the tag.
     * BE CAREFUL: This is a one-way process and cannot be undone.
     */
    makeReadOnly(): Promise<void>;
    /**
     * Format an unformatted NFC tag.
     */
    format(): Promise<void>;
    /**
     * Erase a formatted NFC tag.
     */
    erase(): Promise<void>;
    /**
     * Transfer data via NFC.
     * Only available on Android.
     */
    share(options: ShareOptions): Promise<void>;
    /**
     * Stop sharing data via NFC.
     * Only available on Android.
     */
    stopSharing(): Promise<void>;
    /**
     * Remove all listeners for this plugin.
     */
    removeAllListeners(): Promise<void>;
}
export interface IsEnabledResult {
    /**
     * Whether NFC is enabled or not.
     */
    enabled: boolean;
}
export interface NfcStatusChangedEvent {
    /**
     * Whether NFC was enabled or disabled.
     */
    enabled: boolean;
}
export interface StartScanSessionOptions {
    /**
     * If `true`, the scan session is stopped after the first tag is detected.
     * Default: `false`
     */
    once?: boolean;
    /**
     * If `true`, a scan feedback (sound) is played when a tag is detected.
     * Only available on iOS.
     * Default: `false`
     */
    scanSoundEnabled?: boolean;
    /**
     * If `true`, the scan session is started with alert message.
     * Only available on iOS.
     * Default: `false`
     */
    alertMessageEnabled?: boolean;
}
export interface TagDetectedEvent {
    /**
     * The ID (serial number) of the tag.
     */
    id: string;
    /**
     * The tech types of the tag (e.g. 'ndef', 'mifare', etc.).
     */
    techTypes: string[];
    /**
     * The NDEF messages contained in the tag.
     */
    messages: NdefMessage[];
}
export interface NdefMessage {
    /**
     * The NDEF records contained in the message.
     */
    records: NdefRecord[];
}
export interface NdefRecord {
    /**
     * The ID of the record. May be empty.
     */
    id: string;
    /**
     * The TNF (Type Name Format) of the record.
     * @see NfcTnf for possible values.
     */
    tnf: number;
    /**
     * The type of the record (e.g. 'T' for text, 'U' for URI).
     */
    type: string;
    /**
     * The payload of the record as string, if available.
     */
    payload?: string;
    /**
     * The language code of the record (for text records).
     * Only consistently available on Android.
     */
    languageCode?: string;
    /**
     * The URI of the record (for URI records).
     */
    uri?: string;
    /**
     * The text content of the record (for text records).
     */
    text?: string;
}
export interface WriteOptions {
    /**
     * The NDEF message to write.
     */
    message: NdefMessage;
}
export interface ShareOptions {
    /**
     * The NDEF message to share.
     */
    message: NdefMessage;
}
export interface PluginListenerHandle {
    /**
     * Remove the listener.
     */
    remove: () => Promise<void>;
}
/**
 * NFC TNF (Type Name Format) Constants
 * These determine how to interpret the type field.
 */
export declare enum NfcTnf {
    EMPTY = 0,
    WELL_KNOWN = 1,
    MIME_MEDIA = 2,
    ABSOLUTE_URI = 3,
    EXTERNAL_TYPE = 4,
    UNKNOWN = 5,
    UNCHANGED = 6,
    RESERVED = 7
}
/**
 * NFC RTD (Record Type Definition) Constants
 * These are standardized type names for common record types.
 */
export declare class NfcRtd {
    static readonly TEXT = "T";
    static readonly URI = "U";
    static readonly SMART_POSTER = "Sp";
    static readonly ALTERNATIVE_CARRIER = "ac";
    static readonly HANDOVER_CARRIER = "Hc";
    static readonly HANDOVER_REQUEST = "Hr";
    static readonly HANDOVER_SELECT = "Hs";
}
/**
 * Error codes that might be returned by NFC operations
 */
export declare enum NfcErrorType {
    NOT_SUPPORTED = "not_supported",
    NOT_ENABLED = "not_enabled",
    PERMISSION_DENIED = "permission_denied",
    NO_TAG = "no_tag",
    TAG_ERROR = "tag_error",
    IO_ERROR = "io_error",
    TIMEOUT = "timeout",
    CANCELLED = "cancelled",
    UNEXPECTED_ERROR = "unexpected_error"
}
/**
 * Standard error structure for NFC operations
 */
export interface NfcError extends Error {
    code: NfcErrorType;
    message: string;
    detail?: any;
}
export interface NFCDefinition {
    id: string;
    data: string;
}
