//
//  KMOpenFileGuideProperty.swift
//  PDF Reader Pro Edition
//
//  Created by Niehaoyu on 2023/12/8.
//

import Cocoa

class KMOpenFileGuideProperty: NSView, NibLoadable {

    @IBOutlet weak var contendView: NSView!
    @IBOutlet weak var shadowView: NSView!
    
    @IBOutlet weak var bigCircleView: NSView!
    @IBOutlet weak var smallCircleView: NSView!
    @IBOutlet weak var circleLeftConst: NSLayoutConstraint!
    
    @IBOutlet weak var tipInfoView: NSView!
    @IBOutlet weak var tipTitleLabel: NSTextField!
    @IBOutlet weak var tipSubTitleLabel: NSTextField!
    @IBOutlet weak var skipButton: HyperLinkButton!
    @IBOutlet weak var stepLabel: NSTextField!
    @IBOutlet weak var previousBox: KMBox!
    @IBOutlet weak var previouseLabel: NSTextField!
    @IBOutlet weak var previousButton: KMButton!
    @IBOutlet weak var nextBox: KMBox!
    @IBOutlet weak var nextLabel: NSTextField!
    @IBOutlet weak var nextButton: KMButton!
    
    var circleRect: CGRect = .zero
    var clickHandle: ((_ view: KMOpenFileGuideProperty, _ actionType: KMGuideActionType)->Void)?
    
    override func draw(_ dirtyRect: NSRect) {
        super.draw(dirtyRect)

        // Drawing code here.
    }
    
    deinit {
        DistributedNotificationCenter.default.removeObserver(self)
    }
    
    override func awakeFromNib() {
        super.awakeFromNib()
        
        
        self.bigCircleView.wantsLayer = true
        self.bigCircleView.layer?.cornerRadius = NSWidth(self.bigCircleView.frame)/2
        self.bigCircleView.layer?.borderWidth = 3
        
        self.smallCircleView.wantsLayer = true
        self.smallCircleView.layer?.cornerRadius = NSWidth(self.smallCircleView.frame)/2
        self.smallCircleView.layer?.borderWidth = 3
        
        self.tipInfoView.wantsLayer = true
        self.tipInfoView.layer?.borderWidth = 2
        self.tipInfoView.layer?.cornerRadius = 8
        self.tipInfoView.layer?.masksToBounds = true
        
        self.tipTitleLabel.stringValue = NSLocalizedString("Show/Hide Properties", comment: "")
        self.tipSubTitleLabel.stringValue = NSLocalizedString("Click “Properties” to expand and collapse the right properties panel.", comment: "")
        self.skipButton.title = NSLocalizedString("Skip", comment: "")
        self.previouseLabel.stringValue = NSLocalizedString("Previous", comment: "")
        self.stepLabel.stringValue = NSLocalizedString("2/3", comment: "")
        self.nextLabel.stringValue = NSLocalizedString("Next", comment: "")
        
        self.previousBox.borderWidth = 1
        self.previousBox.cornerRadius = 2
        self.previousBox.fillColor = NSColor.clear
        
        self.nextBox.borderWidth = 1
        self.nextBox.cornerRadius = 2
        self.nextBox.fillColor = NSColor.clear
        
        
        self.skipButton.mouseMoveCallback = { [weak self] mouseEntered in
            if KMAppearance.isDarkMode() {
                if mouseEntered {
                    self?.skipButton.setTitleColor(KMAppearance.KMColor_Layout_H1())
                } else {
                    self?.skipButton.setTitleColor(KMAppearance.KMColor_Layout_H0())
                }
            } else {
                if mouseEntered {
                    self?.skipButton.setTitleColor(KMAppearance.KMColor_Layout_M())
                } else {
                    self?.skipButton.setTitleColor(KMAppearance.KMColor_Layout_H0())
                }
            }
        }
        
        self.previousButton.mouseMoveCallback = { [weak self] mouseEntered in
            if KMAppearance.isDarkMode() {
                if mouseEntered {
                    self?.previousBox.borderColor = NSColor(red: 255/255, green: 255/255, blue: 255/255, alpha: 0.5)
                } else {
                    self?.previousBox.borderColor = NSColor(red: 255/255, green: 255/255, blue: 255/255, alpha: 0.3)
                }
            } else {
                if mouseEntered {
                    self?.previousBox.borderColor = NSColor(red: 39/255, green: 60/255, blue: 98/255, alpha: 1)
                } else {
                    self?.previousBox.borderColor = NSColor(red: 0, green: 0, blue: 0, alpha: 0.15)
                }
            }
        }
        
        self.nextButton.mouseMoveCallback = { [weak self] mouseEntered in
            if KMAppearance.isDarkMode() {
                if mouseEntered {
                    self?.nextBox.borderColor = NSColor(red: 255/255, green: 255/255, blue: 255/255, alpha: 0.5)
                } else {
                    self?.nextBox.borderColor = NSColor.clear
                }
            } else {
                if mouseEntered {
                    self?.nextBox.borderColor = NSColor(red: 39/255, green: 60/255, blue: 98/255, alpha: 1)
                } else {
                    self?.nextBox.borderColor = NSColor.clear
                }
            }
        }
        
        self.shadowView.wantsLayer = true
        self.shadowView.layer?.borderWidth = 0
        self.shadowView.layer?.shadowColor = NSColor.black.withAlphaComponent(0.55).cgColor
        self.shadowView.layer?.shadowOpacity = 0.1
        self.shadowView.layer?.shadowRadius = 3.0
        let shadowPath = NSBezierPath(rect: self.shadowView.bounds)
        if #available(macOS 14.0, *) {
            self.shadowView.layer?.shadowPath = shadowPath.kmCGPath()
        }
        
        DistributedNotificationCenter.default().addObserver(self, selector: #selector(themeChange), name: NSNotification.Name(rawValue: "AppleInterfaceThemeChangedNotification"), object: nil)
        self.updateViewColor()
    }
    
    func updateViewColor() {
        if self.circleRect.origin.x > 500 {
            self.circleLeftConst.constant = NSMinX(self.circleRect) - NSWidth(self.bigCircleView.frame)/2 + NSWidth(self.circleRect)/2
        } else {
            if self.window != nil {
                self.circleLeftConst.constant = NSWidth(self.window!.frame) - 50
            }
        }

        if KMAppearance.isDarkMode() {
            self.tipInfoView.layer?.borderColor = NSColor(red: 34/255, green: 122/255, blue: 255/255, alpha: 1).cgColor
            self.tipInfoView.layer?.backgroundColor = NSColor.black.cgColor
            
            self.tipTitleLabel.textColor = KMAppearance.KMColor_Layout_W0()
            self.tipSubTitleLabel.textColor = KMAppearance.KMColor_Layout_H1()
            self.skipButton.setTitleColor(KMAppearance.KMColor_Layout_H0())
            self.stepLabel.textColor = KMAppearance.KMColor_Layout_H1()
            self.previouseLabel.textColor = KMAppearance.KMColor_Layout_H1()
            self.nextLabel.textColor = KMAppearance.KMColor_Layout_H1()
            
            self.previousBox.borderColor = NSColor(red: 255/255, green: 255/255, blue: 255/255, alpha: 0.3)
            self.previousBox.fillColor = NSColor.clear
            self.nextBox.borderColor = NSColor.clear
            self.nextBox.fillColor = NSColor(red: 255/255, green: 255/255, blue: 255/255, alpha: 0.3)

            self.bigCircleView.layer?.borderColor = NSColor(red: 34/255, green: 122/255, blue: 255/255, alpha: 0.7).cgColor
            self.smallCircleView.layer?.borderColor = NSColor(red: 34/255, green: 122/255, blue: 255/255, alpha: 0.7).cgColor
            
        } else {
            self.tipInfoView.layer?.borderColor = NSColor(red: 73/255, green: 130/255, blue: 230/255, alpha: 1).cgColor
            self.tipInfoView.layer?.backgroundColor = NSColor.white.cgColor
            self.tipTitleLabel.textColor = KMAppearance.KMColor_Layout_M()
            self.tipSubTitleLabel.textColor = KMAppearance.KMColor_Layout_H0()
            self.skipButton.setTitleColor(KMAppearance.KMColor_Layout_H0())
            self.stepLabel.textColor = KMAppearance.KMColor_Layout_H1()
            self.previouseLabel.textColor = KMAppearance.KMColor_Layout_M()
            self.nextLabel.textColor = KMAppearance.KMColor_Layout_M()
            
            self.previousBox.borderColor = NSColor(red: 0, green: 0, blue: 0, alpha: 0.15)
            self.previousBox.fillColor = NSColor.clear
            self.nextBox.borderColor = NSColor.clear
            self.nextBox.fillColor = NSColor(red: 39/255, green: 60/255, blue: 98/255, alpha: 0.1)
            
            self.smallCircleView.layer?.borderColor = NSColor(red: 73/255, green: 130/255, blue: 230/255, alpha: 0.4).cgColor
            self.bigCircleView.layer?.borderColor = NSColor(red: 73/255, green: 130/255, blue: 230/255, alpha: 0.4).cgColor
        }
    }
    
    //MARK: IBAction
    @IBAction func skipAction(_ sender: Any) {
        guard let callBack = self.clickHandle else {
            return
        }
        callBack(self, .skip)
    }
    
    @IBAction func previouseAction(_ sender: Any) {
        guard let callBack = self.clickHandle else {
            return
        }
        callBack(self, .previous)
    }
    
    @IBAction func nextAction(_ sender: Any) {
        guard let callBack = self.clickHandle else {
            return
        }
        callBack(self, .next)
    }
    
    @objc func themeChange() {
       DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.3) {
           self.updateViewColor()
       }
   }
    
}