import Foundation
import TelegramPresentationData
import AccountContext
import Postbox
import TelegramCore
import SwiftSignalKit
import Display
import TelegramPresentationData
import PresentationDataUtils
import ChatMessageItemView
import TelegramNotices

extension ChatControllerImpl {
    func displayBusinessBotMessageTooltip(itemNode: ChatMessageItemView) {
        let _ = (ApplicationSpecificNotice.getBusinessBotMessageTooltip(accountManager: self.context.sharedContext.accountManager)
        |> deliverOnMainQueue).startStandalone(next: { [weak self, weak itemNode] value in
            guard let self, let itemNode else {
                return
            }
            if value >= 2 {
                return
            }
            
            guard let statusNode = itemNode.getStatusNode() else {
                return
            }
            
            let bounds = statusNode.view.convert(statusNode.view.bounds, to: self.chatDisplayNode.view)
            let location = CGPoint(x: bounds.midX, y: bounds.minY - 11.0)
            
            let tooltipController = TooltipController(content: .text(self.presentationData.strings.Chat_BusinessBotMessageTooltip), baseFontSize: self.presentationData.listsFontSize.baseDisplaySize, balancedTextLayout: true, timeout: 3.5, dismissByTapOutside: true, dismissImmediatelyOnLayoutUpdate: true)
            self.checksTooltipController = tooltipController
            tooltipController.dismissed = { [weak self, weak tooltipController] _ in
                if let strongSelf = self, let tooltipController = tooltipController, strongSelf.checksTooltipController === tooltipController {
                    strongSelf.checksTooltipController = nil
                }
            }
            
            let _ = self.chatDisplayNode.messageTransitionNode.addCustomOffsetHandler(itemNode: itemNode, update: { [weak tooltipController] offset, transition in
                guard let tooltipController, tooltipController.isNodeLoaded else {
                    return false
                }
                guard let containerView = tooltipController.view else {
                    return false
                }
                containerView.bounds = containerView.bounds.offsetBy(dx: 0.0, dy: -offset)
                transition.animateOffsetAdditive(layer: containerView.layer, offset: offset)
                
                return true
            })
            
            self.present(tooltipController, in: .current, with: TooltipControllerPresentationArguments(sourceNodeAndRect: { [weak self] in
                guard let self else {
                    return nil
                }
                return (self.chatDisplayNode, CGRect(origin: location, size: CGSize()))
            }))
            
            #if DEBUG
            if "".isEmpty {
                return
            }
            #endif
            let _ = ApplicationSpecificNotice.incrementBusinessBotMessageTooltip(accountManager: self.context.sharedContext.accountManager).startStandalone()
        })
    }
}