import Foundation import Photos struct PhotoAsset: Sendable { let localIdentifier: String let filename: String let creationDate: Date? let mediaType: PHAssetMediaType let pixelWidth: Int let pixelHeight: Int let duration: TimeInterval let isScreenshot: Bool let isRAW: Bool } protocol PhotoLibraryProtocol: AnyObject { var authorizationStatus: PHAuthorizationStatus { get } func requestAuthorization() async -> PHAuthorizationStatus func fetchAssets(filter: BackupFilter) -> [PhotoAsset] func exportAsset(_ asset: PhotoAsset) async throws -> URL } struct BackupFilter: Codable, Sendable { var includePhotos: Bool = true var includeVideos: Bool = true var includeScreenshots: Bool = false var includeRAW: Bool = false var newFilesOnly: Bool = true }