// LibreNMS API response types

export interface LibreNmsApiResponse<T = any> {
	status: 'ok' | 'error';
	message?: string;
	count?: number;
	[key: string]: T | string | number | undefined;
}

export interface SystemInfo {
	local_ver: string;
	local_sha: string;
	local_date: string;
	local_branch: string;
	db_schema: number;
	php_ver: string;
	database_ver: string;
	rrdtool_ver: string;
	netsnmp_ver: string;
}

export interface Device {
	device_id: string;
	hostname: string;
	sysName?: string;
	display?: string;
	os?: string;
	version?: string;
	hardware?: string;
	features?: string;
	location_id?: string;
	lat?: string;
	lng?: string;
	status?: string;
	status_reason?: string;
	ignore?: string;
	disabled?: string;
	uptime?: string;
	agent_uptime?: string;
	last_polled?: string;
	last_poll_attempted?: string;
	last_polled_timetaken?: string;
	last_discovered_timetaken?: string;
	last_discovered?: string;
	last_ping?: string;
	last_ping_timetaken?: string;
	purpose?: string;
	type?: string;
	serial?: string;
	icon?: string;
}

export interface Alert {
	id: string;
	device_id: string;
	rule_id: string;
	state: string;
	alerted: string;
	open: string;
	timestamp: string;
	hostname?: string;
}

export interface AlertRule {
	id: string;
	device_id: string;
	rule: string;
	severity: string;
	extra: string;
	disabled: string;
	name: string;
}

export interface Port {
	port_id: string;
	device_id: string;
	ifName: string;
	ifAlias?: string;
	ifDescr?: string;
	ifIndex: string;
	ifSpeed?: string;
	ifOperStatus?: string;
	ifAdminStatus?: string;
	ifType?: string;
	ifMtu?: string;
	ifPhysAddress?: string;
	ifLastChange?: string;
	ifInOctets?: string;
	ifOutOctets?: string;
	ifInErrors?: string;
	ifOutErrors?: string;
	poll_time?: string;
	poll_prev?: string;
	poll_period?: string;
}

export interface Service {
	service_id: string;
	device_id: string;
	service_ip: string;
	service_type: string;
	service_desc: string;
	service_param: string;
	service_ignore: string;
	service_status: string;
	service_changed: string;
	service_message: string;
	service_disabled: string;
	service_ds: string;
}

export interface BGPSession {
	bgpPeer_id: string;
	device_id: string;
	vrf_id?: string;
	astext?: string;
	bgpPeerIdentifier: string;
	bgpPeerRemoteAs: string;
	bgpPeerState: string;
	bgpPeerAdminStatus: string;
	bgpLocalAddr: string;
	bgpPeerRemoteAddr: string;
	bgpPeerDescr?: string;
	bgpPeerInUpdates: string;
	bgpPeerOutUpdates: string;
	bgpPeerInTotalMessages: string;
	bgpPeerOutTotalMessages: string;
	bgpPeerFsmEstablishedTime: string;
	bgpPeerInUpdateElapsedTime: string;
	context_name: string;
}

export interface Bill {
	bill_id: string;
	bill_name: string;
	bill_type: string;
	bill_cdr: string;
	bill_day: string;
	bill_quota: string;
	rate_95th_in: string;
	rate_95th_out: string;
	rate_95th: string;
	dir_95th: string;
	total_data: string;
	total_data_in: string;
	total_data_out: string;
	rate_average_in: string;
	rate_average_out: string;
	rate_average: string;
	bill_last_calc: string;
	// LibreNMS API response types
}
