//
//  NativeImage.swift
//  Runner
//
//  Created by LittleSheep on 2025/4/21.
//

import Flutter
import UIKit
import Kingfisher

class FLNativeImageFactory : NSObject, FlutterPlatformViewFactory {
    private var messenger: FlutterBinaryMessenger
    
    init(messenger: FlutterBinaryMessenger) {
        self.messenger = messenger
        super.init()
    }
    
    func create(
        withFrame frame: CGRect,
        viewIdentifier viewId: Int64,
        arguments args: Any?
    ) -> FlutterPlatformView {
        return FLNativeImage(
            frame: frame,
            viewIdentifier: viewId,
            arguments: args,
            binaryMessenger: messenger)
    }
    
    /// Implementing this method is only necessary when the `arguments` in `createWithFrame` is not `nil`.
    public func createArgsCodec() -> FlutterMessageCodec & NSObjectProtocol {
        return FlutterStandardMessageCodec.sharedInstance()
    }
}

class FLNativeImage : NSObject, FlutterPlatformView {
    private var _view: ImageView
    
    init(
        frame: CGRect,
        viewIdentifier viewId: Int64,
        arguments args: Any?,
        binaryMessenger messenger: FlutterBinaryMessenger?
    ) {
        _view = ImageView(frame: frame)
        super.init()
        
        let argsMap = args as! [AnyHashable: Any]
        let source = argsMap["src"] as! String
        let blurHash = argsMap["blur"] as? String
        
        if let url = URL(string: source) {
            _view.setImage(from: url, blurHash: blurHash)
        }
    }
    
    func view() -> UIView {
        return _view
    }
}