//
//  BlueGpsViewFactory.swift
//  Runner
//
//  Created by Penguin .
//

import Foundation
import Flutter

/**
 * A factory class for creating instances of [PenguinView].
 * This class implements `FlutterPlatformViewFactory` to create and manage native views.
 */
class PenguinViewFactory: NSObject, FlutterPlatformViewFactory {

    // The binary messenger used for communication with the Flutter engine
    private var messenger: FlutterBinaryMessenger

    /**
     * Initializes the PenguinViewFactory with the given messenger.
     *
     * @param messenger The [FlutterBinaryMessenger] used to communicate with Dart code.
     */
    init(messenger: FlutterBinaryMessenger) {
        self.messenger = messenger
        super.init()
    }

    /**
     * Creates a new instance of [PenguinView].
     *
     * @param frame The frame of the view, specifying its size and position.
     * @param viewId A unique identifier for this view instance.
     * @param args Optional arguments provided for creating the view.
     * @return An instance of [PenguinView] configured with the provided parameters.
     */
    func create(
        withFrame frame: CGRect,
        viewIdentifier viewId: Int64,
        arguments args: Any?
    ) -> FlutterPlatformView {
        return PenguinView(
            frame: frame,
            viewIdentifier: viewId,
            arguments: args,
            binaryMessenger: messenger)
    }

    /**
     * Returns the codec used for encoding and decoding method channel arguments.
     * This method is required when `arguments` in `create` is not `nil`.
     *
     * @return A [FlutterMessageCodec] instance used for serialization.
     */
    public func createArgsCodec() -> FlutterMessageCodec & NSObjectProtocol {
        return FlutterStandardMessageCodec.sharedInstance()
    }
}
