#include <zephyr/kernel.h>
#include <zephyr/logging/log.h>
#include <modem/lte_lc.h>
#include <modem/nrf_modem_lib.h>

LOG_MODULE_REGISTER(app, LOG_LEVEL_INF);

static void lte_connect_once(void)
{
	int err = lte_lc_connect();
	LOG_INF("lte_lc_connect() err=%d", err);
}

static void lte_go_offline(void)
{
	int err = lte_lc_offline();
	LOG_INF("lte_lc_offline() err=%d", err);
}

int main(void)
{
	int err;

	LOG_INF("Init modem library (boot)");
	err = nrf_modem_lib_init();
	LOG_INF("nrf_modem_lib_init() err=%d", err);
	if (err) {
		LOG_ERR("Modem lib init failed: %d", err);
		return 0;
	}

	LOG_INF("Enable LTE for first time");
	lte_connect_once();

	LOG_INF("Waiting 15 seconds to enter shipping mode...");
	k_sleep(K_SECONDS(15));

	LOG_INF("Bring down LTE for shipping mode");
	lte_go_offline();

	LOG_INF("Shutting down modem library...");
	err = nrf_modem_lib_shutdown();
	LOG_INF("nrf_modem_lib_shutdown() err=%d", err);

	int countdown = 65;
	while (countdown > 0) {
		LOG_INF("%d seconds to exit shipping mode", countdown);
		k_sleep(K_SECONDS(5));
		countdown -= 5;
	}

	LOG_INF("Re-init modem library...");
	err = nrf_modem_lib_init();
	LOG_INF("nrf_modem_lib_init() err=%d", err);

	k_sleep(K_MSEC(200));

	LOG_INF("Exiting shipping mode: reconnect LTE");
	lte_connect_once();

	k_sleep(K_FOREVER);
}
