//
//  FWRNPresentContainerViewController.swift
//  react-native-firework-sdk
//
//  Created by Haitao Shangguan on 2023/8/22.
//

import Foundation

class FWRNPresentContainerViewController: UIViewController {
    var rootView: RCTRootView?

    override func viewDidLoad() {
        super.viewDidLoad()
        loadContent()
    }

    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        if let rootView = rootView {
            guard let rootVC = RCTKeyWindow()?.rootViewController,
                  let rootViewPlaceholderResult = FWNavigatorModule.findRCTRootViewPlaceholderResult(rootVC),
                  let rootViewPlaceholderVC = rootViewPlaceholderResult.viewController,
                  let rootViewPlaceholder = rootViewPlaceholderResult.view else {
                return
            }

            let childViewControllers = rootView.reactViewController()?.children
            childViewControllers?.forEach { (childViewController) in
                let detachedController = childViewController
                detachedController.willMove(toParent: nil)
                detachedController.removeFromParent()
                rootViewPlaceholderVC.addChild(detachedController)
                detachedController.didMove(toParent: rootViewPlaceholderVC)
            }
            rootView.removeFromSuperview()
            rootViewPlaceholderVC.view = rootView

            if let reactViewController = rootViewPlaceholder.reactViewController {
                // Restore previous reactViewController
                rootView.setReactViewController(reactViewController)
            }

            self.rootView = nil
        }
    }

    private func loadContent() {
        guard let rootView = rootView else {
            return
        }

        view.addSubview(rootView)
        rootView.translatesAutoresizingMaskIntoConstraints = false

        NSLayoutConstraint.activate([
            rootView.leftAnchor.constraint(equalTo: view.leftAnchor),
            rootView.topAnchor.constraint(equalTo: view.topAnchor),
            rootView.rightAnchor.constraint(equalTo: view.rightAnchor),
            rootView.bottomAnchor.constraint(equalTo: view.bottomAnchor)
        ])
    }
}
