import { getRemoteContextData } from "../remoteContextReloader/getRemoteContextData";

import { appStore } from "@applicaster/zapp-react-native-redux/AppStore";
import { createLogger } from "@applicaster/zapp-react-native-utils/logger";
import { coreAppLogger } from "../logger";

const logger = createLogger({
  category: "PlayerController",
  subsystem: "RemoteDataLoader",
  parent: coreAppLogger,
});

export const remoteDataLoader = async (): Promise<boolean> => {
  if (__DEV__ && !process.env.ENABLE_REMOTE_DATA_IN_DEV) {
    logger.log_info("appRemoteDataLoader: Remote data will be skipped loaded", {
      dev: __DEV__,
      override: process.env.ENABLE_REMOTE_DATA_IN_DEV === "true",
    });

    return true;
  }

  logger.log_info("appRemoteDataLoader: Remote data will be loaded", {
    dev: __DEV__,
    override: process.env.ENABLE_REMOTE_DATA_IN_DEV === "true",
  });

  const { plugins, appSettings } = appStore.get(["plugins", "appSettings"]);

  const dispatch = appStore.getDispatch();

  try {
    // TODO: Runtime configuration urls duplicated with AppLoaderBridge
    await getRemoteContextData(
      dispatch,
      appSettings?.runtimeConfigurationUrls,
      plugins
    );

    logger.log_info(
      "appRemoteDataLoader: Remote data successfully finished, the app is ready to continue loading"
    );

    return true;
  } catch (error) {
    logger.log_error("RemoteDataLoader: Failed to load remote data", { error });

    return false;
  }
};
