export interface SubscriberDTO {
  id: string;
  username: string;
  password?: string;
  package_name?: string;
  speed_mbps?: number;
  mikrotik_profile?: string;
  radius_group?: string;
  ip_address?: string;
  mac_address?: string;
  driver_type: 'MIKROTIK_API' | 'RADIUS';
  status: 'active' | 'expired' | 'suspended' | 'walled_garden' | 'grace_period';
}

export interface DriverResult {
  success: boolean;
  driver: 'MIKROTIK_API' | 'RADIUS';
  action: string;
  targetUser: string;
  details?: Record<string, any>;
  message: string;
  executedAt: string;
}

export interface INetworkDriver {
  readonly driverType: 'MIKROTIK_API' | 'RADIUS';

  /**
   * Provision a new subscriber account on NAS / BRAS / RADIUS
   */
  createUser(subscriber: SubscriberDTO): Promise<DriverResult>;

  /**
   * Suspend or restrict a subscriber (e.g., move to walled-garden or drop rate-limit)
   */
  suspendUser(subscriber: SubscriberDTO, reason?: string): Promise<DriverResult>;

  /**
   * Activate or restore subscriber to full package speed & unrestricted access
   */
  activateUser(subscriber: SubscriberDTO): Promise<DriverResult>;

  /**
   * Immediately terminate active live session to force reconnect with updated attributes
   */
  terminateLiveSession(username: string): Promise<DriverResult>;
}
