import { RTEvent } from "./command";
import { User } from "../models/User";
import { Attendance } from "../models/Attendance";
export interface DeviceInfo {
    userCounts: number;
    logCounts: number;
    logCapacity: number;
}
export type UserData28 = Omit<User, "password" | "group_id" | "card" | "repack29" | "repack73">;
export interface RecordData16 {
    record_time: Date;
    user_id: string;
    ip?: string;
}
export interface AlarmEvent {
    /** Misoperation [0x3A], Tamper [0x37], Exit Button [0x35] */
    alarm_type: any;
    /** indicates cause, 20 = Duress, 22 = Passback */
    alarm_cause: any;
    /** user serial number */
    user_uid: any;
    /** matching way */
    match_type: any;
}
export interface EnrolledFingerEvent {
    /** Error code */
    result: number;
    /** finger size */
    size: number;
    /** user pin, storedAsString  */
    pin: string;
    /** finger index */
    fid: number;
}
export interface FingerScoreEvent {
    /** a number between 0 [0x00] and 100 [0x64] indicating the quality ofThe finger during enrolling process */
    score: number;
}
export type RealTimeLog = {
    event: RTEvent;
    payload?: RecordData16 | EnrolledFingerEvent | AlarmEvent | FingerScoreEvent;
};
interface UDPHeader {
    commandId: number;
    checkSum: number;
    sessionId: number;
    replyId: number;
}
interface TCPHeader extends UDPHeader {
    payloadSize: number;
}
export type FreeSizes = {
    /** Number of users */
    userCounts: number;
    /** Number of logs */
    logCounts: number;
    /** Number of fingerprints */
    fingerCount: number;
    /** Number of admins */
    adminCount: number;
    /** Number or opLogs, maybe access control events? */
    opLogCount: number;
    /** Capacity of logs in bytes */
    logCapacity: number;
    /** Capacity of fingerprints */
    fingerCapacity: number;
    /** Capacity of users */
    userCapacity: number;
    /** Capacity of oplog */
    attLogCapacity: number;
    /** Number of available finger templates */
    fingerAvailable: number;
    /** Number of available Users */
    userAvailable: number;
    /** Number of attendanceLog available */
    attLogAvailable: number;
    /** Number of faces */
    faceCount: number;
    /** Capacity of faces */
    faceCapacity: number;
};
export declare const createUDPHeader: (command: number, sessionId: number, replyId: number, data: any) => Buffer;
export declare const createTCPHeader: (command: number, sessionId: number, replyId: number, data: any) => Buffer;
export declare const removeTcpHeader: (buf: Buffer) => Buffer;
export declare const parseTimeToDate: (time: number) => Date;
export declare const decodeUserData28: (userData: Buffer) => UserData28;
export declare const decodeUserData72: (userData: Buffer) => User;
export declare const decodeRecordData40: (recordData: Buffer) => Attendance;
export declare const decodeRecordData16: (recordData: Buffer) => RecordData16;
export declare const decodeRecordRealTimeLog18: (recordData: Buffer) => RecordData16;
export declare const decodeUDPHeader: (header: Buffer) => UDPHeader;
export declare const decodeTCPHeader: (header: Buffer) => TCPHeader;
export declare const exportErrorMessage: (commandValue: number) => string;
export declare const checkNotEventTCP: (data: Buffer) => boolean;
export declare const checkNotEventUDP: (data: Buffer) => boolean;
export declare const decodeRTEvent: (data: Buffer) => {
    event: RTEvent.EF_FINGER;
    payload?: undefined;
} | {
    event: RTEvent.EF_FPFTR;
    payload: FingerScoreEvent;
};
export declare const decodeRecordRealTimeLog52: (recordData: Buffer) => RecordData16;
export declare const authKey: (comKey: number, sessionId: number) => number[];
/** Some Tcp packets receibed by the socket client can be merged in one single data event by the OS, and we need to split to handle correctly */
export declare const splitTcpPackets: (data: Buffer) => Buffer<ArrayBufferLike>[];
export {};
