//
//  KMPageEditSplitWindowController.swift
//  PDF Reader Pro
//
//  Created by tangchao on 2023/1/12.
//

class KMPageEditSplitWindowController: KMPageEditSettingBaseWindowController {
    var hasPreView = false
    
    override func initSubViews() {
        super.initSubViews()
        
        if (self.hasPreView) {
            let controller = KMPDFInsertPreviewViewController(nibName: "KMPDFInsertPreviewViewController", bundle: nil)
            controller.pdfDocument = CPDFDocument(url: self.model?.documentURL)
            self.contentBox.contentView?.addSubview(controller.view)
            controller.view.frame = NSMakeRect(0, 40, 176+16*2, 300)
            controller.view.autoresizingMask = [.maxYMargin]
            
            if let settingView: KMPageEditSplitSettingView = KMPageEditSplitSettingView.createFromNib() {
                self.contentBox.contentView?.addSubview(settingView)
                let settingViewLeft: CGFloat = 176+16+8
                settingView.frame = NSRect(x: settingViewLeft, y: 0, width: NSWidth(self.contentBox.frame)-settingViewLeft, height: NSHeight(self.contentBox.frame))
                settingView.autoresizingMask = [.width, .height]
                self.settingView = settingView
                settingView.pageCount = self.model?.pageCount ?? 0
                settingView.type = (self.model as? KMPageEditSplitSettingModel)?.type ?? 0
                if (settingView.type == 2) {
                    settingView.setPageRangeString((self.model as? KMPageEditSplitSettingModel)?.pageRangeString ?? "")
                }
                settingView.updateName(self.model?.outputFileName ?? "")
            }
        } else {
            if let settingView: KMPageEditSplitSettingView = KMPageEditSplitSettingView.createFromNib() {
                self.contentBox.contentView = settingView
                self.settingView = settingView
                settingView.pageCount = self.model?.pageCount ?? 0
                settingView.type = (self.model as? KMPageEditSplitSettingModel)?.type ?? 0
                if ((self.model as! KMPageEditSplitSettingModel).type == 2) {
                    settingView.setPageRangeString((self.model as? KMPageEditSplitSettingModel)?.pageRangeString ?? "")
                }
                settingView.updateName(self.model!.outputFileName)
            }
        }
        
        self.settingView?.itemClick = { [unowned self] index, value in
            if (index == 1) { /// 类型切换
                (self.model as? KMPageEditSplitSettingModel)?.type = value as? Int ?? 0
                return
            }
            if (index == 2) { /// 平均每几页拆分
                (self.model as? KMPageEditSplitSettingModel)?.avgNumberForOneFile = value as? Int ?? 0
                return
            }
            if (index == 3) { /// 平均拆分几个文件
                (self.model as? KMPageEditSplitSettingModel)?.avgSplitNumberFile = value as? Int ?? 0
                return
            }
            if (index == 4) { /// 页面范围切换
                (self.model as? KMPageEditSplitSettingModel)?.pageRangeType = value as? Int ?? 0
                return
            }
            if (index == 5) { /// 页面范围输入
                var pageCount = 0
                if let _pageCount = self.model?.pageCount {
                    pageCount = _pageCount
                }
                if let data = value as? String, let _value = Int(data) {
                    if (_value < 1 || _value > pageCount) {
                        let alert = NSAlert()
                        alert.messageText = NSLocalizedString("Page range must between 1 and \(pageCount)", comment: "")
                        alert.informativeText = NSLocalizedString("Out of page range", comment: "")
                        alert.runModal()
                        (self.settingView as? KMPageEditSplitSettingView)?.setPageRangeString("1")
                        (self.model as? KMPageEditSplitSettingModel)?.pageRangeType = 2
                        (self.model as? KMPageEditSplitSettingModel)?.pageRangeString = "1"
                        return
                    }
                }
                (self.model as? KMPageEditSplitSettingModel)?.pageRangeType = 2
                (self.model as? KMPageEditSplitSettingModel)?.pageRangeString = value as? String ?? ""
                return
            }
            if (index == 6) { /// 将原始文档名前置
                (self.model as? KMPageEditSplitSettingModel)?.origFileNameIsPrefix = value as? Bool ?? false
                
                (self.settingView as? KMPageEditSplitSettingView)?.updateName(self.model?.outputFileName ?? "")
                return
            }
            if (index == 7) { /// 标签
                (self.model as? KMPageEditSplitSettingModel)?.hasTag = value as? Bool ?? false
                
                (self.settingView as? KMPageEditSplitSettingView)?.updateName(self.model?.outputFileName ?? "")
                return
            }
            if (index == 8) { /// 分隔符
                (self.model as? KMPageEditSplitSettingModel)?.hasSep = value as? Bool ?? false
                
                (self.settingView as? KMPageEditSplitSettingView)?.updateName(self.model?.outputFileName ?? "")
                return
            }
            
            if (index == 9) { /// 分隔符
                (self.model as? KMPageEditSplitSettingModel)?.tagString = value as? String ?? ""
                
                (self.settingView as? KMPageEditSplitSettingView)?.updateName(self.model?.outputFileName ?? "")
                return
            }
            
            if (index == 10) { /// 分隔符
                (self.model as? KMPageEditSplitSettingModel)?.sepString = value as? String ?? ""
                
                (self.settingView as? KMPageEditSplitSettingView)?.updateName(self.model?.outputFileName ?? "")
                return
            }
        }
    }
    
    override func initDefaultValue() {
        super.initDefaultValue()
        
        if (self.hasPreView) {
            self.setWindowSize(NSSize(width: 583, height: 481))
            self.titleLabel.stringValue = NSLocalizedString("Split", comment: "")
        } else {
            self.setWindowSize(NSSize(width: 480, height: 450))
            self.titleLabel.stringValue = NSLocalizedString("Split Page", comment: "")
        }
        
        self.funcVC?.stringValue = NSLocalizedString("Split", comment: "")
        self.funcVC?.updateUI()
    }
    
    override func funcButtonAction() {
        guard let _model = self.model as? KMPageEditSplitSettingModel else {
            super.funcButtonAction()
            return
        }
        
        if (_model.pageRangeType == 2) {
            let pages = KMPageRangeTools.findSelectPage(pageRangeString: _model.pageRangeString, pageCount: _model.pageCount)
            if (pages.isEmpty) {
                let alert = NSAlert()
                alert.messageText = NSLocalizedString("Page range must between 1 and \(_model.pageCount)", comment: "")
                alert.informativeText = NSLocalizedString("Out of page range", comment: "")
                alert.runModal()
                (self.settingView as? KMPageEditSplitSettingView)?.setPageRangeString("1")
                
                _model.pageRangeString = "1"
                return
            }
        }
        super.funcButtonAction()
    }
}