//
//  KMWatermarkPropertyHomeController.swift
//  PDF Reader Pro
//
//  Created by tangchao on 2023/1/5.
//

import Cocoa
/// 水印 属性主控制器
class KMWatermarkPropertyHomeController: KMWatermarkAdjectivePropertyMainController {

    var preView: CPDFView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    override func gotoHomeController(_ selectedModelID: String) {
        let propertyController = KMWatermarkPropertyController()
        propertyController.preView = self.preView
        self.showController(propertyController)
        
        propertyController.rightButtonClick = { [weak self] index in
            /// 创建水印
            self!.gotoCreateController()
        }
        propertyController.templateModelDidSelected = { [weak self] model in
            let templateModel: KMWatermarkTemplateModel = model as! KMWatermarkTemplateModel
            if (templateModel.isSelected) {
                self?.model = model
            } else {
                self?.model = nil
            }
            
            guard let callback = self?.modelDidChange else {
                return
            }

            callback(self?.model)
        }
        
        propertyController.templateMenuItemClick = { [weak self] index, model in
            if (index == 1) {
                let propertyController: KMWatermarkPropertyController = self!.currentController as! KMWatermarkPropertyController
                let index: Int = propertyController.tabView.indexOfTabViewItem(propertyController.tabView.selectedTabViewItem!)
                
                self?.gotoEditController(model)
                let editController: KMWatermarkPropertyCreateController = self!.currentController as! KMWatermarkPropertyCreateController
                editController.updateModel(model: model, type: index)
            }
        }
    }
    
    override func gotoCreateController() {
        if self.preView != nil {
            let watermarks = self.preView.document.watermarks()
            if (watermarks != nil && watermarks!.count > 0) { /// /// 替换水印
                let alert = NSAlert()
                alert.alertStyle = .warning
                alert.messageText = NSLocalizedString("文件中已添加水印,您要替换现有的水印吗?", comment: "")
                alert.addButton(withTitle: NSLocalizedString("替换", comment: ""))
                alert.addButton(withTitle: NSLocalizedString("Cancel", comment: ""))
                let result = alert.runModal()
                if (result != .alertFirstButtonReturn) {
                    return
                }

                /// 替换
                for i in 0 ..< watermarks!.count {
                    let model = watermarks![i]
                    self.preView.document.removeWatermark(model)
                }

                self.preView.setNeedsDisplayForVisiblePages()
            }
        }
            
        let createController = KMWatermarkPropertyCreateController()
        createController.preView = preView
        createController.model = self.createWatermarkTemplate()
        createController.delegate = self
        self.showController(createController)
        
        createController.backClick = { [weak self] in
            self?.gotoHomeController("")
        }
        createController.rightButtonClick = { [weak self] index in
            /// 保存模块
            let createController: KMWatermarkPropertyCreateController = self!.currentController as! KMWatermarkPropertyCreateController
            let result = KMWatermarkManager.defaultManager.addWatermark(watermark: createController.model as! KMWatermarkModel)
            
            if (result) {
                self?.gotoHomeController("")
            }
        }
        
        self.model = createController.model as! KMWatermarkModel
        
        guard let callback = self.modelDidChange else {
            return
        }
        callback(self.model!)
        
    }
    
    override func gotoEditController(_ model: KMWatermarkAdjectiveBaseModel) {
        let editController = KMWatermarkPropertyCreateController()
        editController.isEdit = true
        editController.preView = self.preView
        editController.model = model
        editController.flagModel = model.copy() as AnyObject
        editController.delegate = self
        
        self.showController(editController)
        
        editController.backClick = { [weak self] in
            let editController: KMWatermarkPropertyCreateController = self!.currentController as! KMWatermarkPropertyCreateController
            let result = KMWatermarkManager.defaultManager.updateWatermark(watermark: editController.model as! KMWatermarkModel)
            if (result) {
                self?.gotoHomeController("")
                
                let propertyController: KMWatermarkPropertyController = self!.currentController as! KMWatermarkPropertyController
                propertyController.updateDatas()
            }
        }
        editController.rightButtonClick = { [weak self] index in
            let editController: KMWatermarkPropertyCreateController = self!.currentController as! KMWatermarkPropertyCreateController
            editController.resume()
        }
    }
    
    private func createWatermarkTemplate() -> KMWatermarkModel {
        let model = KMWatermarkModel()
        
        model.textFont = .font(name: "Helvetica", size: 48)
        model.textColor = .color(red: 0, green: 0, blue: 0, alpha: 1.0)
        model.opacity = 1
        model.pageRangeType = .all
        model.scale = 0.5
        model.verticalMode = 1
        model.horizontalMode = 1
        model.isFront = true
        model.tileVerticalSpace = 6
        model.tileHorizontalSpace = 6
        model.isTilePage = false
        model.pagesString = ""
        model.isFront = true
        model.text = NSLocalizedString("Watermark", comment: "")
        model.watermarkID = KMWatermarkManager.defaultManager.fetchAvailableName()
        
        return model
    }
    
}

extension KMWatermarkPropertyHomeController: KMWatermarkAdjectivePropertyDelegate {
    func propertyInfoDidChange(model: AnyObject) {
//        self.model = (model as! km)
        self.model = model as! KMWatermarkAdjectiveBaseModel
        guard let callback = self.modelDidChange else {
            return
        }

        callback(self.model!)
    }
}