import Foundation
import UIKit
import Display
import ComponentFlow
import TelegramPresentationData
import TelegramCore

private let lineImage: UIImage = {
    let radius: CGFloat = 4.0
    return generateImage(CGSize(width: radius, height: radius * 2.0), rotatedContext: { size, context in
        context.clear(CGRect(origin: CGPoint(), size: size))
        context.setFillColor(UIColor.white.cgColor)
        context.fillEllipse(in: CGRect(origin: CGPoint(), size: CGSize(width: radius * 2.0, height: radius * 2.0)))
    })!.stretchableImage(withLeftCapWidth: 0, topCapHeight: Int(radius)).withRenderingMode(.alwaysTemplate)
}()

public final class MessageQuoteView: UIView {
    public struct Params {
        let presentationData: ChatPresentationData
        let authorName: String?
        let text: String
        let entities: [MessageTextEntity]
        
        public init(
            presentationData: ChatPresentationData,
            authorName: String?,
            text: String,
            entities: [MessageTextEntity]
        ) {
            self.presentationData = presentationData
            self.authorName = authorName
            self.text = text
            self.entities = entities
        }
    }
    
    private let lineView: UIImageView
    
    override private init(frame: CGRect) {
        self.lineView = UIImageView()
        self.lineView.image = lineImage
        
        super.init(frame: frame)
        
        self.addSubview(self.lineView)
    }
    
    required public init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    public static func asyncLayout(_ view: MessageQuoteView?) -> (Params) -> (CGSize, (CGSize) -> MessageQuoteView) {
        return { params in
            var minSize = CGSize()
            
            minSize.height = 100.0
            
            return (minSize, { size in
                let view = view ?? MessageQuoteView(frame: CGRect())
                
                view.lineView.frame = CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: CGSize(width: lineImage.size.width, height: size.height))
                
                return view
            })
        }
    }
}