// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import Cocoa
import FlutterMacOS

/**
 The main application window.

 Performs Flutter app initialization, and handles channel method calls over the
 `samples.flutter.io/platform_view` channel.
*/
class MainFlutterWindow: NSWindow {
  override func awakeFromNib() {
    let flutterViewController = FlutterViewController()
    let windowFrame = self.frame
    self.contentViewController = flutterViewController
    self.setFrame(windowFrame, display: true)

    RegisterGeneratedPlugins(registry: flutterViewController)
    RegisterMethodChannel(registry: flutterViewController)

    super.awakeFromNib()
  }

  func RegisterMethodChannel(registry: FlutterPluginRegistry) {
    let registrar = registry.registrar(forPlugin: "platform_view")
    let channel = FlutterMethodChannel(name: "samples.flutter.io/platform_view",
                                       binaryMessenger: registrar.messenger)
    channel.setMethodCallHandler({ (call, result) in
      if (call.method == "switchView") {
        let count = call.arguments as! Int
        let controller: NSViewController = PlatformViewController(
          withCount: count,
          onClose: { platformViewController in
            result(platformViewController.count)
          }
        )
        self.contentViewController?.presentAsSheet(controller)
      }
    })
  }
}