//
//  KMEditPDFToolbarView.swift
//  PDF Reader Pro
//
//  Created by tangchao on 2024/6/25.
//

import Cocoa

@objc protocol KMEditPDFToolbarViewDelegate: NSObjectProtocol {
    @objc optional func numberOfItems(in toolbarView: KMEditPDFToolbarView) -> Int
    @objc optional func toolbarView(_ toolbarView: KMEditPDFToolbarView, viewFor index: Int) -> NSView?
    
    @objc optional func toolbarView(_ toolbarView: KMEditPDFToolbarView, sizeForItemAt index: Int) -> NSSize

//    @objc optional func toolbarView(_ toolbarView: KMEditPDFToolbarView, insetForSectionAt section: Int) -> NSEdgeInsets
//    @objc optional func toolbarView(_ toolbarView: KMEditPDFToolbarView, minimumLineSpacingForSectionAt section: Int) -> CGFloat
//    @objc optional func toolbarView(_ toolbarView: KMEditPDFToolbarView, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat
}

class KMEditPDFToolbarView: NSView {
    weak var delegate: KMEditPDFToolbarViewDelegate?
    
    var itemViews: [NSView] = []
    
    convenience init() {
        self.init(frame: .zero)
    }
    
    var inset: NSEdgeInsets = NSEdgeInsets(top: 0, left: 0, bottom: 0, right: 0) {
        didSet {
            self.needsLayout = true
        }
    }
    
    func reloadData() {
        for sv in self.subviews {
            sv.removeFromSuperview()
        }
        self.itemViews.removeAll()
        
        guard let num = self.delegate?.numberOfItems?(in: self) else {
            return
        }
        for i in 0 ..< num {
            if let view = self.delegate?.toolbarView?(self, viewFor: i) {
                self.addSubview(view)
                self.itemViews.append(view)
            }
        }
        
        self.needsLayout = true
    }
    
    override func layout() {
        super.layout()
        
        let height = NSHeight(self.bounds)
        
        let leftMargin = self.inset.left
        let topMargin = self.inset.top
        var x = leftMargin
        let vSpace: CGFloat = 3
        for (i, sv) in self.subviews.enumerated() {
            if let size = self.delegate?.toolbarView?(self, sizeForItemAt: i) {
                let y = topMargin
                var frame = NSRect(x: x, y: y, width: size.width, height: size.height)
                x += (size.width + vSpace)
                sv.frame = frame
            }
        }
    }
}