import UIKit
import Flutter
import FirebaseCore
import GoogleMaps

@main
@objc class AppDelegate: FlutterAppDelegate {

    override func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {

        // --- 1. تهيئة خرائط جوجل ---
        // يتأكد من وجود ملف Config.plist ويقرأ المفتاح منه
        if let config = loadConfig(), let apiKey = config["APIKey"] as? String {
            GMSServices.provideAPIKey(apiKey)
        }

        // --- 2. تهيئة Firebase ---
        FirebaseApp.configure()
        
        // --- 3. فحص الأمان قبل تشغيل الواجهة الرئيسية ---
        // ملاحظة: هذا يعتمد على وجود ملفات SecurityChecks في مشروعك
        if SecurityChecks.isDeviceCompromised() {
            showSecurityAlert()
            return false // يمنع إكمال تشغيل التطبيق
        }
        
        // --- 4. إعداد قناة الاتصال مع فلاتر ---
        setupMethodChannel()
        
        GeneratedPluginRegistrant.register(with: self)
        return super.application(application, didFinishLaunchingWithOptions: launchOptions)
    }

    // --- دالة إعداد قناة الاتصال مع تعديل الاسم ---
    func setupMethodChannel() {
        guard let controller = window?.rootViewController as? FlutterViewController else {
            return
        }

        // !! تعديل مهم جداً: تم تغيير اسم القناة ليتوافق مع اسم تطبيقك الجديد
        let channel = FlutterMethodChannel(name: "com.Intaleq.intaleq/security",
                                           binaryMessenger: controller.binaryMessenger)
        
        channel.setMethodCallHandler { call, result in
            switch call.method {
            case "isNativeRooted":
                // يتم إرجاع نتيجة فحص الأمان مباشرة
                result(SecurityChecks.isDeviceCompromised())
            default:
                result(FlutterMethodNotImplemented)
            }
        }
    }

    // --- كل الدوال المساعدة من الكود القديم تم نسخها كما هي ---

    func showSecurityAlert() {
        guard let rootVC = UIApplication.shared.keyWindow?.rootViewController else {
            exit(0)
        }

        let alert = UIAlertController(
            title: "Security Warning".localized,
            message: "Compromised device detected. Exiting.".localized,
            preferredStyle: .alert
        )

        alert.addAction(UIAlertAction(title: "OK".localized, style: .destructive) { _ in
            self.obfuscatedExit()
        })
        
        // لمنع إغلاق التنبيه
        if #available(iOS 15.0, *) {
            alert.presentationController?.delegate = self
        }

        rootVC.present(alert, animated: true, completion: nil)
    }

    func obfuscatedExit() {
        let selector = NSSelectorFromString(String(format: "%@%@", "ex", "it:"))
        if responds(to: selector) {
            perform(selector, with: 0)
        }
    }

    func loadConfig() -> [String: Any]? {
        guard let path = Bundle.main.path(forResource: "Config", ofType: "plist"),
              let config = NSDictionary(contentsOfFile: path) as? [String: Any] else {
            fatalError("Couldn't find Config.plist file. Please add it to your project.")
        }
        return config
    }
}

// --- الامتدادات (Extensions) من الكود القديم ---

// لمنع إغلاق نافذة التنبيه
extension AppDelegate: UIAdaptivePresentationControllerDelegate {
    func presentationControllerShouldDismiss(_ presentationController: UIPresentationController) -> Bool {
        return false
    }

    func presentationControllerDidAttemptToDismiss(_ presentationController: UIPresentationController) {
        // لا تفعل شيئاً عند محاولة الإغلاق
    }
}

// لسهولة الترجمة
extension String {
    var localized: String {
        return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "")
    }
}
