// Dynamic config layered over app.json.
//
// react-native-maps reads the Google Maps key from the *native* manifest
// (AndroidManifest `com.google.android.geo.API_KEY`), not from the JS bundle,
// so EXPO_PUBLIC_GOOGLE_API_KEY has to be injected here at build time. Without
// it Android renders an empty grey tile area instead of a map.

const googleMapsApiKey = process.env.EXPO_PUBLIC_GOOGLE_API_KEY;

const LOCATION_PERMISSION =
  "Waseel uses your location to show nearby drivers and set your pickup point.";

module.exports = ({ config }) => {
  if (!googleMapsApiKey) {
    const message =
      "EXPO_PUBLIC_GOOGLE_API_KEY is not set — the Android manifest will have no " +
      "Maps key and the map will render blank.";

    // `.env` is gitignored, so it is never uploaded to EAS. Unless the key is
    // also registered as an EAS environment variable the build silently
    // produces a keyless APK, and the blank map only shows up on the device.
    // Fail the build here rather than shipping that.
    if (process.env.EAS_BUILD) {
      throw new Error(
        `[app.config] ${message} Register it with \`eas env:create\` (or in the ` +
          "EAS dashboard) for this build profile.",
      );
    }

    console.warn(`[app.config] ${message}`);
  }

  return {
    ...config,
    ios: {
      ...config.ios,
      // iOS uses Apple Maps via PROVIDER_DEFAULT, so this only matters if the
      // Map component is switched to PROVIDER_GOOGLE.
      config: { ...config.ios?.config, googleMapsApiKey },
      infoPlist: {
        ...config.ios?.infoPlist,
        NSLocationWhenInUseUsageDescription: LOCATION_PERMISSION,
      },
    },
    android: {
      ...config.android,
      config: {
        ...config.android?.config,
        googleMaps: { apiKey: googleMapsApiKey },
      },
      // Location permissions come from the expo-location plugin below.
    },
    plugins: [
      ...(config.plugins ?? []),
      [
        "expo-location",
        {
          locationAlwaysAndWhenInUsePermission: LOCATION_PERMISSION,
          locationWhenInUsePermission: LOCATION_PERMISSION,
        },
      ],
    ],
  };
};
