//
//  KMWatermarkPositionView.swift
//  PDF Reader Pro
//
//  Created by tangchao on 2022/12/18.
//

import Cocoa

enum KMWatermarkPosition: Int {
    case leftTop = 0
    case top = 1
    case rightTop = 2
    case leftMiddle = 3
    case middle = 4
    case rightMiddle = 5
    case leftBottom = 6
    case bottom = 7
    case rightBottom = 8
}

typealias KMWatermarkPositionItemClick = (_ position: KMWatermarkPosition)->()
class KMWatermarkPositionView: NSView {
    var hLine1 = NSView()
    var hLine2 = NSView()
    var vLine1 = NSView()
    var vLine2 = NSView()

    var buttons: Array<NSButton> = []
    
    var position: KMWatermarkPosition = .middle
    
    var itemClick: KMWatermarkPositionItemClick!
    
    override init(frame frameRect: NSRect) {
        super.init(frame: frameRect)
        
        initSubViews()
    }
    
    required init?(coder: NSCoder) {
        super.init(coder: coder)
        
        initSubViews()
    }
    
    func initSubViews() {
        wantsLayer = true
        layer?.borderWidth = 1
        layer?.borderColor = NSColor.black.cgColor
        layer?.cornerRadius = 2
        
        addSubview(hLine1)
        addSubview(hLine2)
        addSubview(vLine1)
        addSubview(vLine2)
        
        for line in [hLine1, hLine2, vLine1, vLine2] {
            line.wantsLayer = true
            line.layer?.backgroundColor = NSColor.black.cgColor
        }
        
        for button in buttons {
            button.removeFromSuperview()
        }
        buttons.removeAll()
        
        for i in 0 ... 8 {
            let button = NSButton()
            button.isBordered = false
            button.wantsLayer = true
            button.title = ""
            button.tag = i
            addSubview(button)
            buttons.append(button)
            
            button.target = self
            button.action = #selector(buttonAction)
        }
        
        buttonAction(sender: buttons[4])
    }
    
    override func layout() {
        super.layout()
        
        let width: CGFloat = NSWidth(self.bounds)
        let height: CGFloat = NSHeight(self.bounds)
        
        let itemSize: CGFloat = height / 3
        
        hLine1.frame = NSMakeRect(0, 2*itemSize, width, 1)
        hLine2.frame = NSMakeRect(0, itemSize, width, 1)
        
        vLine1.frame = NSMakeRect(itemSize, 0, 1, height)
        vLine2.frame = NSMakeRect(2*itemSize, 0, 1, height)
        
        var i: Int = 0
        for button in buttons {
            let x: Int = i % 3
            let y: Int = i / 3
            
            button.frame = NSMakeRect(CGFloat(x) * itemSize, CGFloat(y) * itemSize, itemSize, itemSize)
            i += 1
        }
    }
    
    @objc func buttonAction(sender: NSButton) {
        dealButtonSelectedState(selectButton: sender)
        
        if (sender.tag == 0) {
            self.position = .leftBottom
        } else if (sender.tag == 1) {
            self.position = .bottom
        } else if (sender.tag == 2) {
            self.position = .rightBottom
        } else if (sender.tag == 3) {
            self.position = .leftMiddle
        } else if (sender.tag == 4) {
            self.position = .middle
        } else if (sender.tag == 5) {
            self.position = .rightMiddle
        } else if (sender.tag == 6) {
            self.position = .leftTop
        } else if (sender.tag == 7) {
            self.position = .top
        } else if (sender.tag == 8) {
            self.position = .rightTop
        }
        
        guard let callback = itemClick else {
            return
        }
        
        callback(self.position)
    }
    
    func dealButtonSelectedState(selectButton: NSButton) {
        for button in buttons {
            if (button.isEqual(to: selectButton)) {
                button.layer?.backgroundColor = NSColor.black.cgColor
            } else {
                button.layer?.backgroundColor = NSColor.clear.cgColor
            }
        }
    }
    
    func selectPosition(positon: KMWatermarkPosition) {
        self.position = positon
        
        if (positon == .leftTop) {
            dealButtonSelectedState(selectButton: buttons[0])
        } else if (positon == .top) {
            dealButtonSelectedState(selectButton: buttons[1])
        } else if (positon == .rightTop) {
            dealButtonSelectedState(selectButton: buttons[2])
        } else if (positon == .leftMiddle) {
            dealButtonSelectedState(selectButton: buttons[3])
        } else if (positon == .middle) {
            dealButtonSelectedState(selectButton: buttons[4])
        } else if (positon == .rightMiddle) {
            dealButtonSelectedState(selectButton: buttons[5])
        } else if (positon == .leftBottom) {
            dealButtonSelectedState(selectButton: buttons[6])
        } else if (positon == .bottom) {
            dealButtonSelectedState(selectButton: buttons[7])
        } else if (positon == .rightBottom) {
            dealButtonSelectedState(selectButton: buttons[8])
        }
    }
}