// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.

import UIKit
import SessionUIKit
import SessionUtilitiesKit

extension ContextMenuVC {    
    final class EmojiReactsView: UIView {
        private let action: Action
        private let dismiss: () -> Void

        // MARK: - Settings
        
        private static let size: CGFloat = 40
        
        // MARK: - Lifecycle
        
        init(for action: Action, dismiss: @escaping () -> Void) {
            self.action = action
            self.dismiss = dismiss
            
            super.init(frame: CGRect.zero)
            
            setUpViewHierarchy()
        }

        override init(frame: CGRect) {
            preconditionFailure("Use init(for:) instead.")
        }

        required init?(coder: NSCoder) {
            preconditionFailure("Use init(for:) instead.")
        }

        private func setUpViewHierarchy() {
            let emojiLabel = UILabel()
            emojiLabel.text = self.action.title
            emojiLabel.font = .systemFont(ofSize: Values.veryLargeFontSize)
            emojiLabel.set(.height, to: ContextMenuVC.EmojiReactsView.size)
            addSubview(emojiLabel)
            emojiLabel.pin(to: self)
            
            // Tap gesture recognizer
            let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap))
            addGestureRecognizer(tapGestureRecognizer)
        }
        
        // MARK: - Interaction
        
        @objc private func handleTap() {
            action.work()
            dismiss()
        }
    }
    
    final class EmojiPlusButton: UIView {
        private let action: Action?
        private let dismiss: () -> Void

        // MARK: - Settings
        
        public static let size: CGFloat = 28
        private let iconSize: CGFloat = 14
        
        // MARK: - Lifecycle
        
        init(action: Action?, dismiss: @escaping () -> Void) {
            self.action = action
            self.dismiss = dismiss
            
            super.init(frame: CGRect.zero)
            
            setUpViewHierarchy()
        }

        override init(frame: CGRect) {
            preconditionFailure("Use init(for:) instead.")
        }

        required init?(coder: NSCoder) {
            preconditionFailure("Use init(for:) instead.")
        }

        private func setUpViewHierarchy() {
            // Icon image
            let iconImageView = UIImageView(image: #imageLiteral(resourceName: "ic_plus_24").withRenderingMode(.alwaysTemplate))
            iconImageView.tintColor = Colors.text
            iconImageView.set(.width, to: iconSize)
            iconImageView.set(.height, to: iconSize)
            iconImageView.contentMode = .scaleAspectFit
            addSubview(iconImageView)
            iconImageView.center(in: self)
            
            // Background
            isUserInteractionEnabled = true
            backgroundColor = Colors.sessionEmojiPlusButtonBackground
            
            // Tap gesture recognizer
            let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap))
            addGestureRecognizer(tapGestureRecognizer)
        }
        
        // MARK: - Interaction
        
        @objc private func handleTap() {
            dismiss()
            
            DispatchQueue.main.asyncAfter(deadline: .now() + 0.25, execute: { [weak self] in
                self?.action?.work()
            })
        }
    }
}