//
//  Helper.swift
//  VDSSample
//
//  Created by Matt Bruce on 11/18/22.
//

import Foundation
import VDS
import UIKit

extension UIView {
    
    public static func makeWrapper(for view: UIView, edgeSpacing: CGFloat = 0.0, isTrailing: Bool = true) -> UIView {
        return makeWrapperWithConstraints(for: view, edgeSpacing: edgeSpacing, isTrailing: isTrailing).view
    }
    
    public static func makeWrapperWithConstraints(for view: UIView, edgeSpacing: CGFloat = 0.0, isTrailing: Bool = true) -> (view: UIView, container: NSLayoutConstraint.Container) {
        let container = NSLayoutConstraint.Container()
        let wrapper = UIView().with {
            $0.translatesAutoresizingMaskIntoConstraints = false
        }
        wrapper.addSubview(view)
        
        container.topConstraint = view.pinTop(anchor: wrapper.topAnchor, constant: edgeSpacing)
        container.bottomConstraint = view.pinBottom(anchor: wrapper.bottomAnchor, constant: edgeSpacing)
        container.leadingConstraint = view.pinLeading(anchor: wrapper.leadingAnchor, constant: edgeSpacing)
        if isTrailing {
            container.trailingConstraint = view.pinTrailingLessThanOrEqualTo(anchor: wrapper.trailingAnchor, constant: edgeSpacing)
        } else {
            container.trailingConstraint = view.pinTrailing(anchor: wrapper.trailingAnchor, constant: edgeSpacing)
        }
        return (wrapper, container)
    }
}

extension ButtonBase {
    func labelPublisher(_ label: UILabel){
        onClick = { control in
            let newText = "\(control.text!) clicked - "
            if let labelText = label.text {
                let components = labelText.components(separatedBy: " - ")
                let last: String = (components.last ?? "0").trimmingCharacters(in: .whitespaces)
                let count = Int(last)!
                label.text = "\(newText)\(count+1)"
            } else {
                label.text = "\(newText)1"
            }
            print("clicked me")
        }
    }
}

extension BaseViewController {
    func makeButton(_ text: String, label: UILabel) -> Button {
        return Button().with{
            $0.text = text
            $0.labelPublisher(label)
        }
    }
    
    func makeTextLink(_ text: String, label: UILabel) -> TextLink {
        return TextLink().with{
            $0.text = text
            $0.labelPublisher(label)
        }
    }
    
    func makeTextLinkCaret(_ text: String, label: UILabel) -> TextLinkCaret {
        return TextLinkCaret().with{
            $0.text = text
            $0.labelPublisher(label)
        }
    }
}
