/** @file
 * @brief Wi-Fi Network manager API
 *
 * This file contains the Wi-Fi network manager API. These APIs are used by the
 * any network management application to register as a Wi-Fi network manager.
 */

/*
 * Copyright (c) 2023 Nordic Semiconductor ASA.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#ifndef ZEPHYR_INCLUDE_ZEPHYR_NET_WIFI_NM_H_
#define ZEPHYR_INCLUDE_ZEPHYR_NET_WIFI_NM_H_

#include <zephyr/kernel.h>
#include <zephyr/types.h>
#include <zephyr/sys/iterable_sections.h>
#include <zephyr/net/net_if.h>
#include <zephyr/net/wifi_mgmt.h>
/**
 * @brief Wi-Fi Network manager API
 * @defgroup wifi_nm Wi-Fi Network Manager API
 * @ingroup networking
 * @{
 */

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief WiFi Network manager instance
 */
struct wifi_nm_instance {
	/** Name of the Network manager instance */
	const char *name;
	/** Wi-Fi Management operations */
	const struct wifi_mgmt_ops *ops;
	/** List of Managed interfaces */
	struct net_if *mgd_ifaces[CONFIG_WIFI_NM_MAX_MANAGED_INTERFACES];
};

#define WIFI_NM_NAME(name) wifi_nm_##name

#define DEFINE_WIFI_NM_INSTANCE(_name, _ops)		\
	static STRUCT_SECTION_ITERABLE(wifi_nm_instance, WIFI_NM_NAME(_name)) = { \
		.name = STRINGIFY(_name),		\
		.ops = _ops,				\
		.mgd_ifaces = { NULL },		\
	}

/**
 * @brief Get a Network manager instance for a given name
 *
 * @param name Name of the Network manager instance
 *
 */
struct wifi_nm_instance *wifi_nm_get_instance(const char *name);

/**
 * @brief Get a Network manager instance for a given interface
 *
 * @param iface Interface
 *
 */
struct wifi_nm_instance *wifi_nm_get_instance_iface(struct net_if *iface);

/**
 * @brief Register a managed interface
 *
 * @param nm Pointer to Network manager instance
 * @param iface Managed interface
 *
 * @retval 0 If successful.
 * @retval -EINVAL If invalid parameters were passed.
 * @retval -ENOTSUP If the interface is not a Wi-Fi interface.
 * @retval -ENOMEM If the maximum number of managed interfaces has been reached.
 */
int wifi_nm_register_mgd_iface(struct wifi_nm_instance *nm, struct net_if *iface);

/**
 * @brief Unregister managed interface
 *
 * @param nm Pointer to Network manager instance
 * @param iface Interface
 * @return int 0 for OK; -EINVAL for invalid parameters; -ENOENT if interface is not registered
 *	   with the Network manager.
 */
int wifi_nm_unregister_mgd_iface(struct wifi_nm_instance *nm, struct net_if *iface);

/**
 * @}
 */

#ifdef __cplusplus
}
#endif
#endif /* ZEPHYR_INCLUDE_ZEPHYR_NET_WIFI_NM_H_ */
