import * as plugins from '../plugins.js';
import * as authInterfaces from '../data/auth.js';
/**
 * Get all RADIUS clients (NAS devices)
 */
export interface IReq_GetRadiusClients extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_GetRadiusClients> {
    method: 'getRadiusClients';
    request: {
        identity?: authInterfaces.IIdentity;
        apiToken?: string;
    };
    response: {
        clients: Array<{
            name: string;
            ipRange: string;
            description?: string;
            enabled: boolean;
        }>;
    };
}
/**
 * Add or update a RADIUS client
 */
export interface IReq_SetRadiusClient extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_SetRadiusClient> {
    method: 'setRadiusClient';
    request: {
        identity?: authInterfaces.IIdentity;
        apiToken?: string;
        client: {
            name: string;
            ipRange: string;
            secret: string;
            description?: string;
            enabled: boolean;
        };
    };
    response: {
        success: boolean;
        message?: string;
    };
}
/**
 * Remove a RADIUS client
 */
export interface IReq_RemoveRadiusClient extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_RemoveRadiusClient> {
    method: 'removeRadiusClient';
    request: {
        identity?: authInterfaces.IIdentity;
        apiToken?: string;
        name: string;
    };
    response: {
        success: boolean;
        message?: string;
    };
}
/**
 * Get all MAC-to-VLAN mappings
 */
export interface IReq_GetVlanMappings extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_GetVlanMappings> {
    method: 'getVlanMappings';
    request: {
        identity?: authInterfaces.IIdentity;
        apiToken?: string;
    };
    response: {
        mappings: Array<{
            mac: string;
            vlan: number;
            description?: string;
            enabled: boolean;
            createdAt: number;
            updatedAt: number;
        }>;
        config: {
            defaultVlan: number;
            allowUnknownMacs: boolean;
        };
    };
}
/**
 * Add or update a VLAN mapping
 */
export interface IReq_SetVlanMapping extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_SetVlanMapping> {
    method: 'setVlanMapping';
    request: {
        identity?: authInterfaces.IIdentity;
        apiToken?: string;
        mapping: {
            mac: string;
            vlan: number;
            description?: string;
            enabled: boolean;
        };
    };
    response: {
        success: boolean;
        mapping?: {
            mac: string;
            vlan: number;
            description?: string;
            enabled: boolean;
            createdAt: number;
            updatedAt: number;
        };
        message?: string;
    };
}
/**
 * Remove a VLAN mapping
 */
export interface IReq_RemoveVlanMapping extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_RemoveVlanMapping> {
    method: 'removeVlanMapping';
    request: {
        identity?: authInterfaces.IIdentity;
        apiToken?: string;
        mac: string;
    };
    response: {
        success: boolean;
        message?: string;
    };
}
/**
 * Update VLAN configuration
 */
export interface IReq_UpdateVlanConfig extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_UpdateVlanConfig> {
    method: 'updateVlanConfig';
    request: {
        identity?: authInterfaces.IIdentity;
        apiToken?: string;
        defaultVlan?: number;
        allowUnknownMacs?: boolean;
    };
    response: {
        success: boolean;
        config: {
            defaultVlan: number;
            allowUnknownMacs: boolean;
        };
    };
}
/**
 * Test VLAN assignment for a MAC address
 */
export interface IReq_TestVlanAssignment extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_TestVlanAssignment> {
    method: 'testVlanAssignment';
    request: {
        identity?: authInterfaces.IIdentity;
        apiToken?: string;
        mac: string;
    };
    response: {
        assigned: boolean;
        vlan: number;
        isDefault: boolean;
        matchedRule?: {
            mac: string;
            vlan: number;
            description?: string;
        };
    };
}
/**
 * Get active RADIUS sessions
 */
export interface IReq_GetRadiusSessions extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_GetRadiusSessions> {
    method: 'getRadiusSessions';
    request: {
        identity?: authInterfaces.IIdentity;
        apiToken?: string;
        filter?: {
            username?: string;
            nasIpAddress?: string;
            vlanId?: number;
        };
    };
    response: {
        sessions: Array<{
            sessionId: string;
            username: string;
            macAddress?: string;
            nasIpAddress: string;
            nasIdentifier?: string;
            vlanId?: number;
            framedIpAddress?: string;
            startTime: number;
            lastUpdateTime: number;
            status: 'active' | 'stopped' | 'terminated';
            inputOctets: number;
            outputOctets: number;
            sessionTime: number;
        }>;
        totalCount: number;
    };
}
/**
 * Disconnect a RADIUS session
 */
export interface IReq_DisconnectRadiusSession extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_DisconnectRadiusSession> {
    method: 'disconnectRadiusSession';
    request: {
        identity?: authInterfaces.IIdentity;
        apiToken?: string;
        sessionId: string;
        reason?: string;
    };
    response: {
        success: boolean;
        message?: string;
    };
}
/**
 * Get accounting summary/report
 */
export interface IReq_GetRadiusAccountingSummary extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_GetRadiusAccountingSummary> {
    method: 'getRadiusAccountingSummary';
    request: {
        identity?: authInterfaces.IIdentity;
        apiToken?: string;
        startTime: number;
        endTime: number;
    };
    response: {
        summary: {
            periodStart: number;
            periodEnd: number;
            totalSessions: number;
            activeSessions: number;
            totalInputBytes: number;
            totalOutputBytes: number;
            totalSessionTime: number;
            averageSessionDuration: number;
            uniqueUsers: number;
            sessionsByVlan: Record<number, number>;
            topUsersByTraffic: Array<{
                username: string;
                totalBytes: number;
            }>;
        };
    };
}
/**
 * Get RADIUS server statistics
 */
export interface IReq_GetRadiusStatistics extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_GetRadiusStatistics> {
    method: 'getRadiusStatistics';
    request: {
        identity?: authInterfaces.IIdentity;
        apiToken?: string;
    };
    response: {
        stats: {
            running: boolean;
            uptime: number;
            authRequests: number;
            authAccepts: number;
            authRejects: number;
            accountingRequests: number;
            activeSessions: number;
            vlanMappings: number;
            clients: number;
        };
        vlanStats: {
            totalMappings: number;
            enabledMappings: number;
            exactMatches: number;
            ouiPatterns: number;
            wildcardPatterns: number;
        };
        accountingStats: {
            activeSessions: number;
            totalSessionsStarted: number;
            totalSessionsStopped: number;
            totalInputBytes: number;
            totalOutputBytes: number;
            interimUpdatesReceived: number;
        };
    };
}
