import UIKit

public class NetworkOperation {
	
	init(application: UIApplication) {
		self.application = application;
	}
	
	let application : UIApplication
	
	public func started() {
		let numOperationsRunning = OSAtomicIncrement32(&HackyValueHolder.numNetworkingOperations)
		
		if numOperationsRunning == 1 {
			// We were the first operation to start, so we have control of activating the indicator
			application.networkActivityIndicatorVisible = true
		}
	}
	
	public func completed() {
		let numOperationsRemaining = OSAtomicDecrement32(&HackyValueHolder.numNetworkingOperations)
		
		if numOperationsRemaining == 0 {
			application.networkActivityIndicatorVisible = false
		}
	}
	
	struct HackyValueHolder {
		static var numNetworkingOperations : Int32 = 0
	}
}

extension UIApplication {
	public func createNetworkOperation() -> NetworkOperation {
		return NetworkOperation(application: self)
	}
}