import APIClient
import ComposableArchitecture
import Foundation
import Utilities

struct ShareAssetManager {
    @Shared(.inMemory(.shareAssetGenerationMap)) var shareAssetGenerationMap: ShareAssetGenerationMap = .defaultValue

    func shouldContinuePolling(_ assetID: String) -> Bool {
        return $shareAssetGenerationMap.withLock { map in
            map.shouldContinuePolling(assetID)
        }
    }

    func addGenerationItem(_ item: ShareAssetGenerationItem) {
        $shareAssetGenerationMap.withLock { map in
            map.addGenerationProgressItem(item)
        }
    }

    func updateGenerationItem(_ assetID: String, _ statusSchema: ShareAssetStatusSchema) {
        $shareAssetGenerationMap.withLock { map in
            map.udpateGenerationProgressItem(assetID, statusSchema: statusSchema)
        }
    }

    func generationItemFor(_ assetID: String) -> ShareAssetGenerationItem? {
        return $shareAssetGenerationMap.withLock { map in
            map.progressItem(assetID)
        }
    }
}
