//
//  KMLeftSideViewController+Search.swift
//  PDF Reader Pro
//
//  Created by tangchao on 2023/12/24.
//

import Foundation

private let _kRelevanceColumnId = NSUserInterfaceItemIdentifier(rawValue: "relevance")

// MARK: - Methods

extension KMLeftSideViewController {
    func applySearchTableHeader(_ message: String) {
        self.findTableView.tableColumn(withIdentifier: kResultsColumnId)?.headerCell.stringValue = message
        self.findTableView.headerView?.needsDisplay = true
        self.groupedFindTableView.tableColumn(withIdentifier: _kRelevanceColumnId)?.headerCell.stringValue = message
        self.groupedFindTableView.headerView?.needsDisplay = true
    }
    
    func documentDidBeginFind() {
//        [leftSideController applySearchTableHeader:[NSLocalizedString(@"Searching", @"Message in search table header") stringByAppendingEllipsis]];
        self.applySearchTableHeader(KMLocalizedString("Searching", "Message in search table header"))
        self.searchResults = []
        self.groupSearchResults = []
    }
    
    func documentDidEndFind() {
        self.applySearchTableHeader(KMLocalizedString("\(self.searchResults.count) Results", "Message in search table header"))
    }
}

// MARK: - Actions

extension KMLeftSideViewController {
    // 显示搜索模块
    func showSearchMode(_ searchString: String = "") {
        if self.leftView.segmentedControl.selectedSegment == 4 {
            
        } else {
            self.leftView.segmentedControl.selectedSegment = 4
        }
        
        self.searchViewController.searchField.stringValue = searchString
    }
    
    func search_initSubViews() {
        self.findTableView.delegate = self
        self.findTableView.dataSource = self
        self.findTableView.botaDelegate = self
        self.findTableView.menu?.delegate = self
        self.findTableView.target = self
        self.findTableView.doubleAction = #selector(goToSelectedFindResults)
        
        self.groupedFindTableView.delegate = self
        self.groupedFindTableView.dataSource = self
        self.groupedFindTableView.botaDelegate = self
        self.groupedFindTableView.menu?.delegate = self
        
        self.groupedFindTableView.target = self
        self.groupedFindTableView.doubleAction = #selector(goToSelectedFindResults)
    }
    
    func search_initDefalutValue() {
        self.findTableView.backgroundColor = KMAppearance.Layout.l0Color()
        self.groupedFindTableView.backgroundColor = KMAppearance.Layout.l0Color()
        
        self.findTableView.tableColumn(withIdentifier: kPageColumnId)?.headerCell.title = KMLocalizedString("Page", "Table header title")
        self.groupedFindTableView.tableColumn(withIdentifier: kPageColumnId)?.headerCell.title = KMLocalizedString("Page", "Table header title")
        (self.groupedFindTableView.tableColumn(withIdentifier: _kRelevanceColumnId)?.dataCell as? NSCell)?.isEnabled = false
    }
}

// MARK: - Menu

extension KMLeftSideViewController {
    @objc func addAnnotationsForSelections(_ sender: NSMenuItem) {
        guard let selections = sender.representedObject as? [CPDFSelection], selections.count > 0 else {
            return
        }
        for selection in selections {
            self.listView.addAnnotation(with: CAnnotationType(rawValue: sender.tag) ?? .circle, selection: selection, page: selection.page, bounds: selection.bounds)
        }
    }
    
    @objc func selectSelections(_ sender: NSMenuItem) {
        guard let selections = sender.representedObject as? [CPDFSelection], selections.count > 0 else {
            return
        }
        self.listView.currentSelection = CPDFSelection.selectionByAddingSelections(selections as NSArray)
    }
    
    @objc func toggleWholeWordSearch(_ sender: AnyObject?) {
        if self.mwcFlags.wholeWordSearch == 1 {
            self.mwcFlags.wholeWordSearch = 0
        } else {
            self.mwcFlags.wholeWordSearch = 1
        }
        if self.searchField.stringValue.isEmpty == false {
            self.search(self.searchField)
        }
        UserDefaults.standard.setValue(self.mwcFlags.wholeWordSearch, forKey: SKWholeWordSearchKey)
        UserDefaults.standard.synchronize()
    }
    
    @objc func toggleCaseInsensitiveSearch(_ sender: AnyObject?) {
        if self.mwcFlags.caseInsensitiveSearch == 0 {
            self.mwcFlags.caseInsensitiveSearch = 1
        } else {
            self.mwcFlags.caseInsensitiveSearch = 0
        }
        
        if self.searchField.stringValue.isEmpty == false {
            self.search(self.searchField)
        }
        UserDefaults.standard.setValue(self.mwcFlags.caseInsensitiveSearch, forKey: SKCaseInsensitiveSearchKey)
        UserDefaults.standard.synchronize()
    }
}