//
//  KMSigntureViewItem.swift
//  PDF Reader Pro
//
//  Created by lizhe on 2023/10/9.
//

import Cocoa

@objcMembers class KMSigntureViewItem: NSCollectionViewItem {
    @IBOutlet var contendView: NSView!
    @IBOutlet var iconImg: NSImageView!
    @IBOutlet var deleteIconBtn: NSButton!

    weak var delegate: KMSigntureViewItemDelegate?
    
    var trackingArea: NSTrackingArea?
    var itemIndex: Int = 0
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.contendView.wantsLayer = true
        self.contendView.layer?.cornerRadius = 8.0
        self.contendView.layer?.masksToBounds = true
        self.contendView.layer?.borderWidth = 1.0
        self.contendView.layer?.borderColor = NSColor.clear.cgColor

        self.trackingArea = NSTrackingArea(rect: self.view.bounds, options: [.mouseEnteredAndExited, .inVisibleRect, .activeAlways, .mouseMoved], owner: self, userInfo: nil)
        self.view.addTrackingArea(self.trackingArea!)

        self.deleteIconBtn.isHidden = true

        tableViewMenu()
        
        DistributedNotificationCenter.default().addObserver(self, selector: #selector(themeChanged(notification:)), name: NSNotification.Name("AppleInterfaceThemeChangedNotification"), object: nil)
    }
    
    deinit {
        DistributedNotificationCenter.default().removeObserver(self)
    }

    func tableViewMenu() {
        let menu = NSMenu()
        let item = menu.addItem(withTitle: NSLocalizedString("Output", comment: ""), action: nil, keyEquivalent: "")
        let tSubMenu = NSMenu()
        var tMenuItem = tSubMenu.insertItem(withTitle: NSLocalizedString("PNG", comment: ""), action: #selector(exportCustomizeStamp(_:)), keyEquivalent: "", at: 0)
        tMenuItem.tag = 0
        // tMenuItem = tSubMenu.insertItem(withTitle: NSLocalizedString("JPG", comment: ""), action: #selector(exportCustomizeStamp(_:)), keyEquivalent: "", at: 1)
        // tMenuItem.tag = 1
        tMenuItem = tSubMenu.insertItem(withTitle: NSLocalizedString("PDF", comment: ""), action: #selector(exportCustomizeStamp(_:)), keyEquivalent: "", at: 1)
        tMenuItem.tag = 2
        item.submenu = tSubMenu

        menu.addItem(NSMenuItem.separator())
        menu.addItem(withTitle: NSLocalizedString("Remove", comment: ""), action: #selector(deleteCustomizeStamp), keyEquivalent: "")
        menu.addItem(withTitle: NSLocalizedString("Remove All", comment: ""), action: #selector(deleteAllCustomizeStamp), keyEquivalent: "")

        self.view.menu = menu
    }

    var isSelect: Bool = false {
        didSet {
           updateBgColor()
        }
    }

    @objc func themeChanged(notification: NSNotification) {
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
            self.updateBgColor()
        }
    }
    
    func updateBgColor() {
        if KMAppearance.isDarkMode() {
            if isSelect {
                self.contendView.layer?.borderColor = NSColor(red: 37/255.0, green: 65/255.0, blue: 107/255.0, alpha: 1.0).cgColor
                self.contendView.layer?.backgroundColor = NSColor(red: 37/255.0, green: 65/255.0, blue: 107/255.0, alpha: 1.0).cgColor
            } else {
                self.contendView.layer?.borderColor = NSColor.clear.cgColor
                self.contendView.layer?.backgroundColor = NSColor.clear.cgColor
            }
        }else {
            if isSelect {
                self.contendView.layer?.borderColor = NSColor(red: 217/255.0, green: 228/255.0, blue: 250/255.0, alpha: 1.0).cgColor
                self.contendView.layer?.backgroundColor = NSColor(red: 217/255.0, green: 228/255.0, blue: 250/255.0, alpha: 1.0).cgColor
            } else {
                self.contendView.layer?.borderColor = NSColor.clear.cgColor
                self.contendView.layer?.backgroundColor = NSColor.clear.cgColor
            }
        }
    }
    
    override func mouseEntered(with event: NSEvent) {
        super.mouseEntered(with: event)

        if isSelect {
            self.deleteIconBtn.isHidden = false
        } else {
            self.deleteIconBtn.isHidden = false
            if KMAppearance.isDarkMode() {
                self.contendView.layer?.borderColor = NSColor(red: 37/255.0, green: 65/255.0, blue: 107/255.0, alpha: 1.0).cgColor
                self.contendView.layer?.backgroundColor = NSColor(red: 37/255.0, green: 65/255.0, blue: 107/255.0, alpha: 1.0).cgColor
            }else {
                self.contendView.layer?.borderColor = NSColor(red: 217/255.0, green: 228/255.0, blue: 250/255.0, alpha: 1.0).cgColor
                self.contendView.layer?.backgroundColor = NSColor(red: 217/255.0, green: 228/255.0, blue: 250/255.0, alpha: 1.0).cgColor
            }
        }
    }

    override func mouseExited(with event: NSEvent) {
        super.mouseExited(with: event)

        if isSelect {
            self.deleteIconBtn.isHidden = false
        } else {
            self.deleteIconBtn.isHidden = true
            self.contendView.layer?.borderColor = NSColor.clear.cgColor
            self.contendView.layer?.backgroundColor = NSColor.clear.cgColor
        }
    }

    @objc func exportCustomizeStamp(_ sender: NSMenuItem) {
        if let delegate = self.delegate {
            delegate.kmSigntureViewItem(self, didClickMenuWithItem: sender)
        }
    }

    @objc func deleteCustomizeStamp() {
        if let delegate = self.delegate {
            delegate.kmSigntureViewItemDidClickDeleteMenuItem(self)
        }
    }

    @objc func deleteAllCustomizeStamp() {
        if let delegate = self.delegate {
            delegate.kmSigntureViewItemDidClickAllDeleteMenuItem(self)
        }
    }
}

@objc protocol KMSigntureViewItemDelegate: NSObjectProtocol {
    func kmSigntureViewItem(_ item: KMSigntureViewItem, didClickMenuWithItem menuItem: NSMenuItem)
    func kmSigntureViewItemDidClickDeleteMenuItem(_ item: KMSigntureViewItem)
    func kmSigntureViewItemDidClickAllDeleteMenuItem(_ item: KMSigntureViewItem)
}