//
//  CompareViewController.swift
//  KdanAuto
//
//  Created by 朱东勇 on 2023/2/2.
//

import Foundation
import AppKit

class CompareViewController: NSViewController, NSTableViewDataSource, NSTableViewDelegate, NSPopoverDelegate {
    
    @IBOutlet var listView : NSTableView!
    
    var _files : NSArray!
    var _popover: NSPopover!
    
    static var sharedCViewController : CompareViewController? = nil
    class func shared() -> CompareViewController {
        if nil == sharedCViewController {
            var objects : NSArray!
            
            Bundle.main.loadNibNamed("CompareViewController", owner: nil, topLevelObjects: &objects)
            
            for tView in objects {
                if let tv = tView as? CompareViewController {
                    sharedCViewController = tv
                }
            }
        }
        
        return sharedCViewController!
    }
    
    func showIn(_ view:NSView?, rect:NSRect) {
        if _popover == nil {
            _popover = NSPopover.init()
            _popover.contentViewController = self;
            _popover.delegate = self
        }
        _popover.contentSize = self.view.frame.size
        
        _popover.show(relativeTo: rect, of: view!, preferredEdge: NSRectEdge.minX)
    }
    
    // Getter & Setter
    func setFiles(_ files:NSArray) {
        _files = files
        
        listView.reloadData()
    }
    
    
    // IBAction
    @IBAction func closeAction(_ sender: NSButton) {
        _popover.close()
    }
    
    
    // TableView Delegate
    func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
        let cellView = ImageCompareCellView.shared()
        
        if (_files.count >= row) {
            let fileInfo = _files[row] as! NSMutableDictionary

            cellView?.setFileInfo(fileInfo)
        }
        
        return cellView
    }
    
    func selectionShouldChange(in tableView: NSTableView) -> Bool {
        
        return true
    }
    
    func tableView(_ tableView: NSTableView, shouldSelectRow row: Int) -> Bool {
        
        return false
    }
    
    func tableView(_ tableView: NSTableView, shouldSelect tableColumn: NSTableColumn?) -> Bool {
        
        return false
    }
    
    func tableView(_ tableView: NSTableView, mouseDownInHeaderOf tableColumn: NSTableColumn) {
        
    }
    
    func tableView(_ tableView: NSTableView, didClick tableColumn: NSTableColumn) {
        
    }
    
    func tableView(_ tableView: NSTableView, didDrag tableColumn: NSTableColumn) {
        
    }
    
    func tableView(_ tableView: NSTableView, heightOfRow row: Int) -> CGFloat {
        return 900
    }
    
    func tableView(_ tableView: NSTableView, isGroupRow row: Int) -> Bool {
        return false
    }
    
    func tableView(_ tableView: NSTableView, sizeToFitWidthOfColumn column: Int) -> CGFloat {
        return tableView.frame.width
    }
    
    func tableView(_ tableView: NSTableView, rowActionsForRow row: Int, edge: NSTableView.RowActionEdge) -> [NSTableViewRowAction] {
        return []
    }
    
    func tableViewSelectionDidChange(_ notification: Notification) {
        
    }
    
    // TableView Data Source
    func numberOfRows(in tableView: NSTableView) -> Int {
        if nil == _files {
            return 0
        }
        
        return _files.count
    }
    
    //
    func popoverShouldClose(_ popover: NSPopover) -> Bool {
        return true
    }
}
