#pragma once
#include <stdint.h>

struct gprs_ns2_inst;
struct osmo_fsm_inst;
struct gprs_ra_id;

enum bssp_ptp_bvc_fsm_state {
	BSSGP_BVCFSM_S_NULL,
	BSSGP_BVCFSM_S_BLOCKED,
	BSSGP_BVCFSM_S_WAIT_RESET_ACK,
	BSSGP_BVCFSM_S_UNBLOCKED,
};

enum bssgp_ptp_bvc_fsm_event {
	/* Rx of BSSGP PDUs from the remote side; 'data' is 'struct tlv_parsed', and
	 * the assumption is that the caller has already validated all mandatory IEs
	 * are present and of sufficient length */
	BSSGP_BVCFSM_E_RX_BLOCK,
	BSSGP_BVCFSM_E_RX_BLOCK_ACK,
	BSSGP_BVCFSM_E_RX_UNBLOCK,
	BSSGP_BVCFSM_E_RX_UNBLOCK_ACK,
	BSSGP_BVCFSM_E_RX_RESET,
	BSSGP_BVCFSM_E_RX_RESET_ACK,
	/* Requests of the local user */
	BSSGP_BVCFSM_E_REQ_BLOCK,	/* data: uint8_t *cause */
	BSSGP_BVCFSM_E_REQ_UNBLOCK,
	BSSGP_BVCFSM_E_REQ_RESET,	/* data: uint8_t *cause */
};

struct bssgp_bvc_fsm_ops {
	/* call-back notifying the user of a state change */
	void (*state_chg_notification)(uint16_t nsei, uint16_t bvci, int old_state, int new_state,
					void *priv);
	/* call-back notifying the user of a BVC-RESET event */
	void (*reset_notification)(uint16_t nsei, uint16_t bvci, const struct gprs_ra_id *ra_id,
				   uint16_t cell_id, uint8_t cause, void *priv);
};

struct osmo_fsm_inst *
bssgp_bvc_fsm_alloc_sig_bss(void *ctx, struct gprs_ns2_inst *nsi, uint16_t nsei, uint32_t features);

struct osmo_fsm_inst *
bssgp_bvc_fsm_alloc_ptp_bss(void *ctx, struct gprs_ns2_inst *nsi, uint16_t nsei, uint16_t bvci,
			    const struct gprs_ra_id *ra_id, uint16_t cell_id);

struct osmo_fsm_inst *
bssgp_bvc_fsm_alloc_sig_sgsn(void *ctx, struct gprs_ns2_inst *nsi, uint16_t nsei, uint32_t features);

struct osmo_fsm_inst *
bssgp_bvc_fsm_alloc_ptp_sgsn(void *ctx, struct gprs_ns2_inst *nsi, uint16_t nsei, uint16_t bvci);

void bssgp_bvc_fsm_set_ops(struct osmo_fsm_inst *fi, const struct bssgp_bvc_fsm_ops *ops, void *ops_priv);

bool bssgp_bvc_fsm_is_unblocked(struct osmo_fsm_inst *fi);

uint8_t bssgp_bvc_fsm_get_block_cause(struct osmo_fsm_inst *fi);

uint32_t bssgp_bvc_get_features_advertised(struct osmo_fsm_inst *fi);
uint32_t bssgp_bvc_get_features_received(struct osmo_fsm_inst *fi);
uint32_t bssgp_bvc_get_features_negotiated(struct osmo_fsm_inst *fi);
