/* eslint-disable @typescript-eslint/no-var-requires */
/**
 * Fix für: "Starting from Xcode 14, resource bundles are signed by default,
 * which requires setting the development team for each resource bundle target."
 *
 * Grund: wir bauen mit `useFrameworks: "static"` (expo-build-properties) — dabei
 * erzeugt CocoaPods für jeden Pod mit Ressourcen ein Resource-Bundle-Target, und
 * Xcode 14+ will die signieren (mit einem Development-Team). EAS-Build hat keins
 * für diese Targets → Build bricht ab.
 *
 * Lösung: im Podfile-`post_install`-Hook für alle Resource-Bundle-Targets
 * `CODE_SIGNING_ALLOWED = NO` setzen — die brauchen keine Signatur.
 *
 * Der Podfile hat schon EINEN `post_install do |installer|`-Block (mit
 * `react_native_post_install`) — ein zweiter würde den ersten ersetzen, also
 * injizieren wir IN den bestehenden Block (gleich nach dem `do |installer|`).
 * Läuft als withDangerousMod('ios') während `expo prebuild`, bevor `pod install`.
 * Idempotent via Marker-Kommentar.
 */
const { withDangerousMod } = require('@expo/config-plugins');
const fs = require('fs');
const path = require('path');

const MARKER = '# REBREAK_RESOURCE_BUNDLE_SIGNING_FIX';

const FIX = `
    ${MARKER}
    # Xcode 14+ signiert Resource-Bundles per default -> braucht ein Dev-Team.
    # Mit static frameworks (+ privacyManifestAggregationEnabled) erzeugen Pods
    # mehrere Bundle-Targets (Resource-Bundles, aggregierte Privacy-Manifests).
    # Brute-Force: Code-Signing auf JEDEM Target im Pods-Projekt abschalten —
    # Pod-Targets brauchen keine Signatur, nur die Main-App.
    installer.pods_project.targets.each do |t|
      t.build_configurations.each do |config|
        config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'
        config.build_settings['CODE_SIGNING_REQUIRED'] = 'NO'
        config.build_settings['EXPANDED_CODE_SIGN_IDENTITY'] = ''
      end
    end
    Pod::UI.puts "  -> Disabled code signing on \#{installer.pods_project.targets.count} pod targets".green
    ${MARKER}
`;

module.exports = function withResourceBundleSigningFix(config) {
  return withDangerousMod(config, [
    'ios',
    async (cfg) => {
      const podfilePath = path.join(cfg.modRequest.platformProjectRoot, 'Podfile');
      if (!fs.existsSync(podfilePath)) {
        console.warn('[with-resource-bundle-signing-fix] Podfile not found at', podfilePath);
        return cfg;
      }
      let podfile = fs.readFileSync(podfilePath, 'utf-8');
      if (podfile.includes(MARKER)) {
        return cfg; // schon gepatcht
      }
      // Direkt nach dem (einzigen) `post_install do |installer|` einfügen.
      const anchorRe = /(post_install do \|installer\|[^\n]*\n)/;
      if (!anchorRe.test(podfile)) {
        console.warn('[with-resource-bundle-signing-fix] no `post_install do |installer|` block found — skipping');
        return cfg;
      }
      podfile = podfile.replace(anchorRe, `$1${FIX}`);
      fs.writeFileSync(podfilePath, podfile);
      console.log('[with-resource-bundle-signing-fix] patched Podfile post_install');
      return cfg;
    },
  ]);
};
