import { EventEmitter } from 'events';
import { Logger } from 'pino';
import { CotEvent, CotMessage } from '../types/cot';
import { TAKEntity, Mission, DataPackage } from '../types/tak';
export interface TAKServerClientConfig {
    url: string;
    apiToken?: string;
    clientCert?: string;
    clientKey?: string;
    verifySsl?: boolean;
    timeout?: number;
    logger?: Logger;
}
export declare class TAKServerClient extends EventEmitter {
    private axios;
    private ws?;
    private config;
    private logger?;
    constructor(config: TAKServerClientConfig);
    testConnection(): Promise<void>;
    getCotEvents(params?: {
        start?: Date;
        end?: Date;
        types?: string[];
        uids?: string[];
        bbox?: [number, number, number, number];
        limit?: number;
    }): Promise<CotEvent[]>;
    private formatTAKDate;
    private parseCotEvent;
    sendCotEvent(event: CotMessage): Promise<void>;
    subscribeToCotEvents(filter?: {
        types?: string[];
        bbox?: [number, number, number, number];
    }, onEvent?: (event: CotEvent) => void): Promise<void>;
    unsubscribe(): Promise<void>;
    getEntities(params?: {
        types?: string[];
        teams?: string[];
        roles?: string[];
        bbox?: [number, number, number, number];
    }): Promise<TAKEntity[]>;
    getEntity(uid: string): Promise<TAKEntity>;
    getMissions(): Promise<Mission[]>;
    getMission(name: string): Promise<Mission>;
    createMission(mission: Partial<Mission>): Promise<Mission>;
    updateMission(name: string, updates: Partial<Mission>): Promise<Mission>;
    deleteMission(name: string): Promise<void>;
    getDataPackages(): Promise<DataPackage[]>;
    uploadDataPackage(file: Buffer, metadata: Partial<DataPackage>): Promise<DataPackage>;
    downloadDataPackage(id: string): Promise<Buffer>;
    deleteDataPackage(id: string): Promise<void>;
    spatialQuery(params: {
        center: [number, number];
        radius?: number;
        polygon?: [number, number][];
        types?: string[];
        timeWindow?: {
            start: Date;
            end: Date;
        };
    }): Promise<CotEvent[]>;
    calculateDistance(point1: [number, number], point2: [number, number]): Promise<number>;
    findNearest(params: {
        point: [number, number];
        types?: string[];
        limit?: number;
        maxDistance?: number;
    }): Promise<Array<TAKEntity & {
        distance: number;
    }>>;
    getAlerts(active?: boolean): Promise<any[]>;
    sendAlert(alert: {
        type: string;
        message: string;
        point: [number, number];
        severity: 'low' | 'medium' | 'high' | 'critical';
    }): Promise<void>;
    disconnect(): Promise<void>;
}
//# sourceMappingURL=tak-server.d.ts.map