import { ExpoConfig, ConfigContext } from 'expo/config';

// Same as booking-mobile: versions live in release.config.js only.
// eslint-disable-next-line @typescript-eslint/no-require-imports
const release = require('./release.config.js') as {
  APP_VERSION: string;
  ANDROID_VERSION_CODE: number;
  IOS_BUILD_NUMBER: string;
};

const EAS_PROJECT_ID =
  process.env.EAS_PROJECT_ID ??
  process.env.EXPO_PUBLIC_EAS_PROJECT_ID ??
  'b33890e4-e4bf-4d68-bcff-a2f54210ca36';

export default ({ config }: ConfigContext): ExpoConfig => ({
  ...config,
  name: 'My Immotech',
  slug: 'immotech-call-mobile',
  version: release.APP_VERSION,
  orientation: 'portrait',
  scheme: 'immotechcall',
  userInterfaceStyle: 'light',
  // Required by react-native-reanimated 4 (booking-mobile has neither → newArch false there).
  newArchEnabled: true,
  icon: './assets/icon.png',
  splash: {
    image: './assets/splash.png',
    resizeMode: 'contain',
    backgroundColor: '#0d2b52',
  },
  ios: {
    supportsTablet: false,
    bundleIdentifier: 'app.immotech.call',
    buildNumber: String(release.IOS_BUILD_NUMBER),
    infoPlist: {
      NSMicrophoneUsageDescription:
        'Immotech utilise le micro pour la dictée vocale des notes d’appel et de visite.',
      NSPhotoLibraryUsageDescription:
        'Immotech accède à vos photos pour les joindre aux biens immobiliers.',
      NSCameraUsageDescription:
        'Immotech utilise la caméra pour photographier les biens immobiliers.',
      NSFaceIDUsageDescription:
        'Immotech utilise Face ID pour déverrouiller votre session CRM rapidement et en sécurité.',
      NSLocationWhenInUseUsageDescription:
        'Immotech utilise votre position pour vérifier si vous êtes dans votre zone de prospection.',
      ITSAppUsesNonExemptEncryption: false,
      LSApplicationQueriesSchemes: [
        'whatsapp',
        'tel',
        'maps',
        'comgooglemaps',
        'waze',
        'googlechromes',
      ],
    },
  },
  android: {
    adaptiveIcon: {
      foregroundImage: './assets/adaptive-icon.png',
      backgroundColor: '#0d2b52',
    },
    package: 'app.immotech.call',
    versionCode: release.ANDROID_VERSION_CODE,
    permissions: [
      'android.permission.ACCESS_COARSE_LOCATION',
      'android.permission.ACCESS_FINE_LOCATION',
      'android.permission.READ_CALL_LOG',
      'android.permission.READ_PHONE_STATE',
      'android.permission.READ_PHONE_NUMBERS',
      'android.permission.CALL_PHONE',
      'android.permission.RECORD_AUDIO',
      'android.permission.POST_NOTIFICATIONS',
      'android.permission.USE_FULL_SCREEN_INTENT',
      'android.permission.SYSTEM_ALERT_WINDOW',
    ],
  },
  web: {
    favicon: './assets/favicon.png',
  },
  plugins: [
    'expo-router',
    'expo-secure-store',
    [
      'expo-local-authentication',
      {
        faceIDPermission:
          'Immotech utilise Face ID pour déverrouiller votre session CRM rapidement et en sécurité.',
      },
    ],
    [
      'expo-location',
      {
        locationWhenInUsePermission:
          'Immotech utilise votre position pour vérifier si vous êtes dans votre zone de prospection.',
      },
    ],
    'expo-asset',
    'expo-font',
    'expo-localization',
    'expo-av',
    '@react-native-community/datetimepicker',
    [
      'expo-build-properties',
      {
        // Required so patches/react-native+0.81.5.patch (iOS 26 TurboModule fix)
        // is compiled into the binary — prebuilt XCFramework ignores source patches.
        ios: {
          buildReactNativeFromSource: true,
        },
      },
    ],
    [
      'expo-splash-screen',
      {
        backgroundColor: '#0d2b52',
        image: './assets/splash.png',
        imageWidth: 280,
      },
    ],
    [
      'expo-image-picker',
      {
        photosPermission:
          'Immotech accède à vos photos pour les joindre aux biens immobiliers.',
        cameraPermission:
          'Immotech utilise la caméra pour photographier les biens immobiliers.',
      },
    ],
  ],
  extra: {
    apiUrl: process.env.EXPO_PUBLIC_API_URL ?? 'https://crm.immotech.app/api',
    eas: {
      projectId: EAS_PROJECT_ID,
    },
  },
  // Bare workflow (android/) — Expo Go rejects { policy: 'appVersion' }.
  // Keep in sync with release.config.js for EAS Update.
  runtimeVersion: release.APP_VERSION,
  updates: {
    url: `https://u.expo.dev/${EAS_PROJECT_ID}`,
  },
  owner: 'miroumar',
});
