//
//  MultiSourceEmojiLabel.swift
//  Tusker
//
//  Created by Shadowfacts on 10/18/20.
//  Copyright © 2020 Shadowfacts. All rights reserved.
//

import UIKit
import Pachyderm

private let emojiRegex = try! NSRegularExpression(pattern: ":(\\w+):", options: [])

class MultiSourceEmojiLabel: UILabel, BaseEmojiLabel {
    var emojiIdentifier: String?
    var emojiRequests = [ImageCache.Request]()
    var emojiFont: UIFont { font }
    var emojiTextColor: UIColor { textColor }
    
    var combiner: (([NSAttributedString]) -> NSAttributedString)?
    
    func setEmojis(pairs: [(String, [Emoji])], identifier: String) {
        guard pairs.count > 0 else { return }
        
        self.emojiIdentifier = identifier
        emojiRequests.forEach { $0.cancel() }
        emojiRequests = []
        
        var attributedStrings = pairs.map { NSAttributedString(string: $0.0) }
        
        func recombine() {
            if let combiner = self.combiner {
                self.attributedText = combiner(attributedStrings)
            }
        }
        
        recombine()
        
        for (index, (string, emojis)) in pairs.enumerated() {
            self.replaceEmojis(in: string, emojis: emojis, identifier: identifier) { (attributedString, _) in
                attributedStrings[index] = attributedString
                DispatchQueue.main.async { [weak self] in
                    guard let self = self, self.emojiIdentifier == identifier else { return }
                    recombine()
                }
            }
        }
    }

}
