//
//  AnimatedImage.swift
//  
//
//  Created by MainasuK Cirno on 2021-7-16.
//

import SwiftUI
import Nuke
import FLAnimatedImage

public struct AnimatedImage: UIViewRepresentable {

    public let imageURL: URL?

    public init(imageURL: URL?) {
        self.imageURL = imageURL
    }
    
    public func makeUIView(context: Context) -> FLAnimatedImageViewProxy {
        let proxy = FLAnimatedImageViewProxy(frame: .zero)
        Nuke.loadImage(with: imageURL, into: proxy.imageView)
        return proxy
    }

    public func updateUIView(_ proxy: FLAnimatedImageViewProxy, context: Context) {
        Nuke.cancelRequest(for: proxy.imageView)
        Nuke.loadImage(with: imageURL, into: proxy.imageView)
    }
}

final public class FLAnimatedImageViewProxy: UIView {
    let imageView = FLAnimatedImageView()

    override init(frame: CGRect) {
        super.init(frame: frame)

        imageView.translatesAutoresizingMaskIntoConstraints = false
        addSubview(imageView)
        NSLayoutConstraint.activate([
            imageView.topAnchor.constraint(equalTo: topAnchor),
            imageView.leadingAnchor.constraint(equalTo: leadingAnchor),
            imageView.trailingAnchor.constraint(equalTo: trailingAnchor),
            imageView.bottomAnchor.constraint(equalTo: bottomAnchor),
        ])
    }

    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

struct AnimatedImage_Previews: PreviewProvider {
    static var previews: some View {
        AnimatedImage(
            imageURL: URL(string: "https://upload.wikimedia.org/wikipedia/commons/2/2c/Rotating_earth_%28large%29.gif")
        )
        .frame(width: 300, height: 300)
    }
}