import { NextRequest, NextResponse } from 'next/server';
import { AgentShieldConfig, DetectionResult, AgentShieldEvents } from '@kya-os/agentshield';

/**
 * Next.js-specific type definitions
 */

/**
 * Next.js middleware configuration
 */
interface NextJSMiddlewareConfig extends Partial<AgentShieldConfig> {
    /**
     * Action to take when an agent is detected
     */
    onAgentDetected?: 'block' | 'redirect' | 'rewrite' | 'allow' | 'log';
    /**
     * Custom handler for agent detection
     * @deprecated Use 'events' instead. Will be removed in v1.0.0
     */
    onDetection?: (req: NextRequest, result: DetectionResult) => NextResponse | Promise<NextResponse> | void | Promise<void>;
    /**
     * Event handlers for detection events
     */
    events?: Partial<AgentShieldEvents>;
    /**
     * Path patterns to skip detection
     */
    skipPaths?: string[] | RegExp[];
    /**
     * Response when blocking agents
     */
    blockedResponse?: {
        status: number;
        message: string;
        headers?: Record<string, string>;
    };
    /**
     * Redirect URL when redirecting detected agents
     */
    redirectUrl?: string;
    /**
     * Rewrite URL when rewriting requests from detected agents
     */
    rewriteUrl?: string;
    /**
     * Confidence threshold for agent detection
     */
    confidenceThreshold?: number;
    /**
     * Enable WASM for enhanced detection
     */
    enableWasm?: boolean;
    /**
     * Session tracking configuration
     */
    sessionTracking?: {
        /**
         * Enable session tracking
         */
        enabled: boolean;
        /**
         * Cookie name for session storage
         * Default: '__agentshield_session'
         */
        cookieName?: string;
        /**
         * Cookie max age in seconds
         * Default: 3600 (1 hour)
         */
        cookieMaxAge?: number;
        /**
         * Encryption key for session data
         * Default: Uses AGENTSHIELD_SECRET env var or default key
         */
        encryptionKey?: string;
    };
}
/**
 * Detection context for hooks
 */
interface DetectionContext {
    result: DetectionResult;
    request: NextRequest;
    userAgent?: string;
    ip?: string;
}

export type { DetectionContext as D, NextJSMiddlewareConfig as N };
