import Foundation

actor Warehouse {
    var stock: Int = 10
    func takeFromStock(amount: Int, thread: String) {
        let localStock = stock
        stock -= amount
        print(thread)
    }
}

@main
struct App {
    static func main() async {
        let warehouse = Warehouse()

        let threadB = Task.detached {
            await warehouse.takeFromStock(amount: 2, thread: "B")
        }

        let threadA = Task.detached {
            await warehouse.takeFromStock(amount: 1, thread: "A")
        }

        _ = await threadB.result
        _ = await threadA.result

        let finalStock = await warehouse.stock
        print("Endgültiger Lagerbestand: \(finalStock) Stück")
    }
}
