import { Elysia } from "elysia";

//#region \0dts:/home/runner/work/logixlysia/logixlysia/src/interfaces/index.d.ts
interface RequestInfo {
	headers: {
		get: (key: string) => string | null
	};
	method: string;
	url: string;
}
type LogLevel = "DEBUG" | "INFO" | "WARNING" | "ERROR" | string;
interface LogData {
	status?: number;
	message?: string;
	context?: Record<string, string | number | boolean | null>;
	stack?: string;
	metrics?: {
		memoryUsage?: number
		cpuUsage?: number
		responseSize?: number
	};
}
interface Logger {
	log(level: LogLevel, request: RequestInfo, data: LogData, store: StoreData): void;
	handleHttpError(request: RequestInfo, error: HttpError, store: StoreData): void;
	customLogFormat?: string;
}
interface StoreData {
	beforeTime: bigint;
}
declare class HttpError extends Error {
	status: number;
	constructor(status: number, message: string);
}
type TransportFunction = (level: LogLevel, message: string, meta: {
	request: RequestInfo
	data: LogData
	store: StoreData
}) => Promise<void> | void;
interface Transport {
	log: TransportFunction;
}
interface TimestampConfig {
	translateTime?: boolean | string;
}
interface Options {
	config?: {
		customLogFormat?: string
		logFilePath?: string
		logRotation?: {
			maxSize?: number
			maxFiles?: number
			compress?: boolean
		}
		logFilter?: {
			level?: LogLevel | LogLevel[]
			method?: string | string[]
			status?: number | number[]
		} | null
		ip?: boolean
		useColors?: boolean
		showStartupMessage?: boolean
		startupMessageFormat?: "banner" | "simple"
		transports?: Transport[]
		timestamp?: TimestampConfig
	};
}

//#endregion
//#region \0dts:/home/runner/work/logixlysia/logixlysia/src/logger/create-logger.d.ts
declare function createLogger(options?: Options): Logger;

//#endregion
//#region \0dts:/home/runner/work/logixlysia/logixlysia/src/logger/handle-http-error.d.ts
declare function handleHttpError(request: RequestInfo, error: HttpError, store: StoreData, options?: Options): void;

//#endregion
//#region \0dts:/home/runner/work/logixlysia/logixlysia/src/output/console.d.ts
declare function logToTransports(level: LogLevel, request: RequestInfo, data: LogData, store: StoreData, options?: Options): Promise<void>;

//#endregion
//#region \0dts:/home/runner/work/logixlysia/logixlysia/src/index.d.ts
declare function logixlysia(options?: Options): Elysia;

//#endregion
export { createLogger, logixlysia as default, handleHttpError, logToTransports };