import { AuthType } from "../enums/AuthType";
import { ConnectionType } from "../enums/ConnectionType";
import { DataNativeBinding } from "./DataNativeBinding";
import { MessageHeaderNativeBinding } from "./MessageHeaderNativeBinding";
import { POPMessageInfoNativeBinding } from "./POPMessageInfoNativeBinding";

export declare class POPSessionNativeBinding {
    get hostname(): string;
    set hostname(hostname: string);
    get port(): number;
    set port(port: number);
    get username(): string;
    set username(username: string);
    get password(): string;
    set password(password: string);
    get checkCertificateEnabled(): boolean;
    set checkCertificateEnabled(isEnabled: boolean);
    get authType(): AuthType;
    set authType(authType: AuthType);
    get connectionType(): ConnectionType;
    set connectionType(connectionType: ConnectionType);
    get timeout(): number;
    set timeout(tmout: number);
    set strictGost(value: Boolean);
    get strictGost(): Boolean;

    checkAccount(): Promise<number>;
    connect(): number;
    disconnect(): void;
    login(): number;
    fetchMessages(): POPMessageInfoNativeBinding[];
    fetchHeader(msg: number | POPMessageInfoNativeBinding): MessageHeaderNativeBinding;
    fetchMessage(msg: number | POPMessageInfoNativeBinding): DataNativeBinding;
    deleteMessage(msg: number | POPMessageInfoNativeBinding): number;

    noop(): number;
}

export declare interface POPSessionNativeBindingObject {
    new(): POPSessionNativeBinding
    strError(errorCode: number): string
}
