//
//  KMStepperView.swift
//  PDF Reader Pro
//
//  Created by wanjun on 2023/1/30.
//

import Cocoa

protocol KMStepperViewDelegate: NSObjectProtocol {
    func km_controlTextDidEndEditing(_ obj: KMStepperView)
    func km_controlTextDidChange(_ obj: KMStepperView)
    func km_controlClick(_ obj: KMStepperView)
}

class KMStepperView: NSViewController {

    @IBOutlet weak var mainBox                          : NSBox!
    @IBOutlet weak var upButton                         : NSButton!
    @IBOutlet weak var downButton                       : NSButton!
    @IBOutlet weak var textfield                        : NSTextField!
    @IBOutlet weak var horizontalLine                   : NSView!
    @IBOutlet weak var verticalLine                     : NSView!

    @IBOutlet weak var mainBoxHeight                    : NSLayoutConstraint! // mainBox 高度约束
    @IBOutlet weak var mainBoxWidth                     : NSLayoutConstraint! // mainBox 宽度约束
    @IBOutlet weak var upButtonWidth                    : NSLayoutConstraint! // upButton 宽度约束
    @IBOutlet weak var downButtonWidth                  : NSLayoutConstraint! // downButton 宽度约束
    @IBOutlet weak var horizontalLine_mainBox_spacing   : NSLayoutConstraint! // horizontalLine、mainBox 水平间距约束
    @IBOutlet weak var horizontalLineHeight             : NSLayoutConstraint! // horizontalLine 高度约束
    @IBOutlet weak var horizontalLineWidth              : NSLayoutConstraint! // horizontalLine 宽度约束
    @IBOutlet weak var mainBox_textfield_spacing        : NSLayoutConstraint! // mainBox、textfield 水平间距约束
    @IBOutlet weak var mainBox_verticalLine_spacing     : NSLayoutConstraint! // mainBox、verticalLine 垂直间距约束
    @IBOutlet weak var textfield_button_spacing         : NSLayoutConstraint! // textfield、button 水平间距约束
    @IBOutlet weak var verticalLine_mainBox_spacing     : NSLayoutConstraint! // verticalLine、mainBox 垂直间距约束
    @IBOutlet weak var verticalLineWidth                : NSLayoutConstraint! // verticalLine 宽度约束
    
    var buttonWidth             = 20.0  // upButtonWidth、downButtonWidth 宽度
    var horizontalLine_mainBox  = 0.0   // horizontalLine、mainBox 水平间距
    var hLineHeight             = 1.0   // horizontalLine 高度
    var hLineWidth              = 20.0  // horizontalLine 宽度
    var mainBox_textfield       = 8.0   // mainBox、textfield 水平间距
    var mainBox_verticalLine    = 0.0   // mainBox、verticalLine 垂直间距
    var textfield_button        = 8.0   // textfield、button 水平间距
    var verticalLine_mainBox    = 0.0   // verticalLine、mainBox 垂直间距
    var vLineWidth              = 1.0   // verticalLine 宽度
    
    var height: Float = 32.0
    var width: Float = 72.0
    var text: String = "0"
    var textColor: NSColor = .black
    var font: NSFont = NSFont.systemFont(ofSize: 14.0)
    var background: NSColor = .clear
    var borderWidth: Float = 0.0
    var borderColor: NSColor = .clear
    var cornerRadius: Float = 0.0
    var upImage: NSImage = NSImage(named: "btn_arrow_gray_up_s_norm_on") ?? NSImage()
    var downImage: NSImage = NSImage(named: "btn_arrow_gray_down_s_norm_on") ?? NSImage()
    open weak var delete: KMStepperViewDelegate?
    var enabled: Bool = true // 是否可点击

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do view setup here.
        
        horizontalLine.wantsLayer = true
        horizontalLine.layer?.backgroundColor = NSColor(red: 0/255.0, green: 0/255.0, blue: 0/255.0, alpha: 0.1).cgColor
        verticalLine.wantsLayer = true
        verticalLine.layer?.backgroundColor = NSColor(red: 0/255.0, green: 0/255.0, blue: 0/255.0, alpha: 0.1).cgColor
        
        updateUI()
    }
    
    // MARK: Private Methods

    func updateUI() -> Void {
        mainBox.fillColor = background
        mainBox.borderWidth = CGFloat(borderWidth)
        mainBox.cornerRadius = CGFloat(cornerRadius)
        mainBox.borderColor = borderColor
        textfield.stringValue = text
        textfield.textColor = textColor
        textfield.font = font
        upButton.image = upImage
        downButton.image = downImage
        upButton.isEnabled = enabled
        downButton.isEnabled = enabled
        textfield.isEnabled = enabled
        
        mainBoxHeight.constant = CGFloat(height)
        mainBoxWidth.constant = CGFloat(width)
        upButtonWidth.constant = buttonWidth
        downButtonWidth.constant = buttonWidth
        horizontalLine_mainBox_spacing.constant = horizontalLine_mainBox
        horizontalLineHeight.constant = hLineHeight
        horizontalLineWidth.constant = hLineWidth
        mainBox_textfield_spacing.constant = mainBox_textfield
        mainBox_verticalLine_spacing.constant = mainBox_verticalLine
        textfield_button_spacing.constant = textfield_button
        verticalLine_mainBox_spacing.constant = verticalLine_mainBox
        verticalLineWidth.constant = vLineWidth
    }
        
    // MARK: Action
    
    @IBAction func upButtonAction(_ sender: NSButton) {
        var float = text.stringToCGFloat()
        float += 0.1
        text = String(format: "%.2f", float)
                
        self.delete?.km_controlClick(self)
    }
    
    @IBAction func downButtonAction(_ sender: NSButton) {
        var float = text.stringToCGFloat()
        float -= 0.1
        text = String(format: "%.2f", float)
                
        self.delete?.km_controlClick(self)
    }
}

extension KMStepperView: NSTextFieldDelegate {
    func controlTextDidEndEditing(_ obj: Notification) {
        let object = obj.object as! NSTextField
        text = object.stringValue
        self.delete?.km_controlTextDidEndEditing(self)
    }
    
    func controlTextDidChange(_ obj: Notification) {
        let object = obj.object as! NSTextField
        text = object.stringValue

        self.delete?.km_controlTextDidChange(self)
    }
}