import { logger } from "@applicaster/zapp-react-native-utils/logger";
import { platformSelect } from "@applicaster/zapp-react-native-utils/reactUtils";
import NetInfo from "@react-native-community/netinfo";
import { isConnectionInfoReady } from "./utils";

function platformShouldSkipOfflineSetup(env: string) {
  return (
    env === "test" ||
    platformSelect({
      ios: false,
      android: false,
      default: true,
    })
  );
}

export function networkStatusReady(env = process.env.NODE_ENV) {
  return new Promise<void>((resolve) => {
    if (platformShouldSkipOfflineSetup(env)) {
      logger.info("skip waiting for network ready");
      resolve();

      return;
    }

    // eslint-disable-next-line prefer-const
    let unsubscribe;

    const listener = (netInfoState) => {
      if (isConnectionInfoReady(netInfoState)) {
        logger.info({
          message: "net info ready",
          data: { timestamp: new Date(Date.now()).toISOString() },
        });

        resolve(netInfoState);
        unsubscribe?.();
      }
    };

    unsubscribe = NetInfo.addEventListener(listener);
  });
}
