//
//  KMPrintPreviewView.swift
//  PDF Master
//
//  Created by lizhe on 2022/12/8.
//

import Cocoa

class KMPrintPreviewView: KMBaseXibView {
    @IBOutlet weak var previewContentView: NSView!
    @IBOutlet weak var previewView: CPDFListView!
    
    @IBOutlet weak var titleLabel: NSTextField!
    @IBOutlet weak var previousButton: NSButton!
    
    @IBOutlet weak var nextButton: NSButton!
    
    @IBOutlet weak var currentPageTextField: KMBaseTextField!
    @IBOutlet weak var pageCountLabel: NSTextField!

    @IBOutlet weak var partitionLabel: NSTextField!
    private lazy var presenter: KMPrintPreviewPresenter = KMPrintPreviewPresenter()
    var pdfDocument: CPDFDocument? {
        didSet {
            self.previewView.document = pdfDocument
            self.previewView.autoScales = true
            self.previewView.setDisplay(.singlePage)
            self.previewView.documentView().documentView?.enclosingScrollView?.hasVerticalScroller = false
            self.previewView.documentView().documentView?.enclosingScrollView?.hasHorizontalScroller = false
            self.presenter.initPresenter(delegate: self, view: self.previewView)
            self.reloadData()
        }
    }
    
    deinit {
//        self.delegate = nil
    }

    override func draw(_ dirtyRect: NSRect) {
        super.draw(dirtyRect)

        // Drawing code here.
        
    }
    
    override func setup() {
        super.setup()
        
        self.previewContentView.wantsLayer = true
        self.previewContentView.layer?.backgroundColor = NSColor(hex: "#F7F8FA").cgColor
        
        self.currentPageTextField.textField.font = NSFont.SFProTextRegular(12.0)
        self.currentPageTextField.textField.textColor = NSColor(hex: "#252629")
        self.currentPageTextField.textDidEndEditing = {[unowned self] (string) in
            self.presenter.toPage(index: UInt(string) ?? 0)
        }
        
        self.partitionLabel.textColor = NSColor(hex: "#252629")
        
        self.titleLabel.font = NSFont.SFProTextRegular(12.0)
        self.titleLabel.textColor = NSColor(hex: "#616469")
        
        self.pageCountLabel.font = NSFont.SFProTextRegular(12.0)
        self.pageCountLabel.textColor = NSColor(hex: "#252629")
        
        self.previousButton.wantsLayer = true
        self.previousButton.layer?.borderWidth = 1
        self.previousButton.layer?.borderColor = NSColor(hex: "#DFE1E5").cgColor
        self.previousButton.layer?.cornerRadius = 4
        self.previousButton.image = NSImage(named: "icon_btn_pagination_back_norm")
        
        self.nextButton.wantsLayer = true
        self.nextButton.layer?.borderWidth = 1
        self.nextButton.layer?.borderColor = NSColor(hex: "#DFE1E5").cgColor
        self.nextButton.layer?.cornerRadius = 4
        self.nextButton.image = NSImage(named: "icon_btn_pagination_back_norm")
        self.nextButton.image = NSImage(named: "icon_btn_pagination_lastpage_dis")
    }
    
    func notification() {
        NotificationCenter.default.addObserver(self, selector: #selector(PDFViewDocumentChangedNotification), name: NSNotification.Name.CPDFViewPageChanged, object: nil)
    }
    
    //刷新PDFPreview
    override func reloadData() {
        super.reloadData()

        //UI 显示
        if self.pdfDocument != nil {
            let page = self.previewView.currentPage()
            let pageIndex = self.previewView.document.index(for: page)
            self.currentPageTextField.stringValue = (pageIndex + 1).description
            self.pageCountLabel.stringValue = self.previewView.document.pageCount.description
            
            if page != nil {
                self.titleLabel.stringValue = NSLocalizedString("size", comment: "") + ":" + String(Int(page!.size.width / 28.3 * 10)) + NSLocalizedString("mm", comment: "") + "*" + String(Int(page!.size.height / 28.3 * 10)) + NSLocalizedString("mm", comment: "")
            }
        }
    }
    
    //MARK: 通知
    @objc func PDFViewDocumentChangedNotification(_ notification: Notification) -> Void {
//        self.reloadData()
    }
}

protocol KMPrintPreviewViewAction { }
extension KMPrintPreviewView: KMPrintPreviewViewAction {
    @IBAction func nextButton(_ sender: NSButton) {
        self.presenter.nextPage()
    }
    
    @IBAction func previousAction(_ sender: NSButton) {
        self.presenter.previousPage()
    }
    
    func toPageIndex(_ index: UInt = 0) {
        self.presenter.toPage(index: index)
    }
}

extension KMPrintPreviewView: KMPrintPreviewPresenterDelegate {
    func dataDidChange(presenter: KMPrintPreviewPresenter, view: CPDFView) {
        self.reloadData()
    }
    
    func documentDidChange(presenter: KMPrintPreviewPresenter, document: CPDFDocument) {
        self.previewView.document = document
        self.reloadData()
    }
}