const appJson = require('./app.json');

const isDevVariant = process.env.APP_VARIANT === 'dev';
const releaseApiBaseUrl = 'https://bbs.littlelan.cn/api/v1';
const releaseUpdatesBaseUrl = 'https://updates.littlelan.cn';
const devApiBaseUrl = process.env.EXPO_PUBLIC_API_BASE_URL || 'http://192.168.31.238:8080/api/v1';

function toManifestUrl(baseUrl, portOverride) {
  const parsed = new URL(baseUrl);
  if (portOverride != null) {
    parsed.port = String(portOverride);
  }
  parsed.pathname = '/api/manifest';
  parsed.search = '';
  parsed.hash = '';
  return parsed.toString();
}

const releaseUpdatesUrl =
  process.env.EXPO_PUBLIC_UPDATES_URL || toManifestUrl(releaseUpdatesBaseUrl);
const devUpdatesUrl =
  process.env.EXPO_PUBLIC_DEV_UPDATES_URL || toManifestUrl(devApiBaseUrl, 3001);

const expo = appJson.expo;

module.exports = {
  ...expo,
  name: isDevVariant ? `${expo.name} Dev` : expo.name,
  runtimeVersion: {
    policy: 'appVersion',
  },
  updates: {
    ...(expo.updates || {}),
    url: isDevVariant ? devUpdatesUrl : releaseUpdatesUrl,
    checkAutomatically: 'ON_LOAD',
    fallbackToCacheTimeout: 0,
  },
  ios: expo.ios,
  android: {
    ...expo.android,
    package: 'skin.carrot.bbs',
  },
  extra: {
    ...(expo.extra || {}),
    appVariant: isDevVariant ? 'dev' : 'release',
    apiBaseUrl: isDevVariant ? devApiBaseUrl : releaseApiBaseUrl,
    updatesUrl: isDevVariant ? devUpdatesUrl : releaseUpdatesUrl,
  },
};
