declare module 'api-stats-logger' {
  export interface LoggerOptions {
    apiKey?: string;
    url?: string;
    service?: string;
    environment?: string;
    batchSize?: number;
    flushInterval?: number;
    enabled?: boolean;
    maxRetries?: number;
    retryDelay?: number;
    captureErrors?: boolean;
    capturePerformance?: boolean;
  }

  export interface LogEntry {
    level: string;
    message: string;
    service?: string;
    environment?: string;
    metadata?: Record<string, any>;
  }

  export interface LoggerStats {
    sent: number;
    failed: number;
    retries: number;
    lastFlush: string | null;
    bufferSize: number;
    failedBufferSize: number;
    enabled: boolean;
  }

  export interface MiddlewareOptions {
    logger?: ApiStatsLogger;
    captureBody?: boolean;
    captureHeaders?: boolean;
    captureQuery?: boolean;
    captureParams?: boolean;
    skipPaths?: string[];
    skipMethods?: string[];
    skipRoutes?: string[];
    maxBodySize?: number;
  }

  export interface AutoInstrumentOptions {
    autoDetect?: boolean;
    detectFramework?: boolean;
    captureHTTP?: boolean;
    captureDatabase?: boolean;
    captureErrors?: boolean;
    captureQueries?: boolean;
    maxQueryLength?: number;
  }

  export class Logger {
    constructor(options: LoggerOptions);
    
    log(entry: LogEntry): void;
    flush(): Promise<void>;
    retryFailed(): Promise<void>;
    getStats(): LoggerStats;
    disable(): void;
    enable(): void;
    close(): Promise<void>;
  }

  export class ApiStatsLogger extends Logger {
    constructor(options?: LoggerOptions);
    
    info(message: string, metadata?: Record<string, any>): void;
    error(message: string, metadata?: Record<string, any>): void;
    warn(message: string, metadata?: Record<string, any>): void;
    debug(message: string, metadata?: Record<string, any>): void;
    
    static expressMiddleware(options?: MiddlewareOptions): Function;
    static nestMiddleware(options?: MiddlewareOptions): Function;
    static init(options?: LoggerOptions & AutoInstrumentOptions): ApiStatsLogger;
  }

  export interface DatabaseMiddleware {
    mongoose(): void;
    sequelize(instance: any): void;
  }

  export interface MiddlewareManager {
    express(options?: MiddlewareOptions): Function;
    nest(options?: MiddlewareOptions): Function;
    database(options?: { logger: ApiStatsLogger; captureQueries?: boolean; maxQueryLength?: number }): DatabaseMiddleware;
  }

  export interface AutoInstrument {
    setup(logger: ApiStatsLogger, options?: AutoInstrumentOptions): void;
  }

  export default ApiStatsLogger;
} 