//
//  KMAnnotationModel.swift
//  PDF Reader Pro
//
//  Created by tangchao on 2024/4/3.
//

import Cocoa

class KMAnnotationModel: NSObject {
    weak var anno: CPDFAnnotation?
}

class KMBotaAnnotationModel: KMAnnotationModel {
    var showPage                = true
    var showTime                = true
    var showAuthor              = true
    
    var foldType: KMFoldType    = .none
    var foldH: CGFloat = 30
    
    func isFold() -> Bool {
        if self.foldType == .unfold {
            return false
        }
        return true
    }
    
    func canFold() -> Bool {
        guard let data = self.anno else {
            return false
        }
        if data is CPDFMarkupAnnotation {
            return true
        }
        if data is CPDFTextAnnotation {
            return true
        }
        return false
    }
}

class KMAnnotationListModel: NSObject {
    var datas: [KMBotaAnnotationModel] = []
    
    // 默认全部折叠
    var foldType: KMFoldType {
        set {
            for model in self.canFoldModel() {
                if newValue != .none {
                    model.foldType = newValue
                }
            }
        }
        get {
            let canFolds = self.canFoldModel()
            if canFolds.isEmpty {
                return .none
            }
            
            // 是否全部折叠
            var isAll = true
            for model in canFolds {
                if model.isFold() == false {
                    isAll = false
                    break
                }
            }
            if isAll {
                return .fold
            }
            
            // 是否全部展开
            for model in canFolds {
                if model.isFold() {
                    isAll = false
                    break
                }
            }
            
            return isAll ? .unfold : .none
        }
    }
    
    func canFoldModel() -> [KMBotaAnnotationModel] {
        var models: [KMBotaAnnotationModel] = []
        for model in self.datas {
            if model.canFold() {
                models.append(model)
            }
        }
        return models
    }
    
    func isAllFold() -> Bool {
        for model in self.canFoldModel() {
            if model.isFold() == false {
                return false
            }
        }
        return true
    }
}