//
//  FileManager+Size.swift
//  Tusker
//
//  Created by Shadowfacts on 11/28/22.
//  Copyright © 2022 Shadowfacts. All rights reserved.
//

import Foundation

extension FileManager {
    func recursiveSize(url: URL) -> Int64? {
        if (try? url.resourceValues(forKeys: [.isRegularFileKey]).isRegularFile) == true {
            return size(url: url)
        } else {
            guard let enumerator = enumerator(at: url, includingPropertiesForKeys: [.isRegularFileKey, .fileSizeKey, .totalFileAllocatedSizeKey]) else {
                return nil
            }
            var total: Int64 = 0
            for case let url as URL in enumerator {
                total += size(url: url) ?? 0
            }
            return total
        }
    }
}

private func size(url: URL) -> Int64? {
    guard let resourceValues = try? url.resourceValues(forKeys: [.isRegularFileKey, .fileSizeKey, .totalFileAllocatedSizeKey]),
          resourceValues.isRegularFile ?? false,
          let size = resourceValues.fileSize ?? resourceValues.totalFileAllocatedSize else {
        return nil
    }
    return Int64(size)
}
