# Lair Configuration DSL Case Study (Python 3)
# Semantic Model Direct Test Script
# H. Conrad Cunningham

#234567890123456789012345678901234567890123456789012345678901234567890

# 2018-02-27: (V1) adapted from Martin Fowler's Ruby version rules0.rb

from model import *

print("Starting Lair DSL test")
config = Configuration()
config.add_item(Item("secure_air_vent"))
print("Added secure_air_vent: " +
          str(config.get_item("secure_air_vent")))

config.add_item(Item("acid_bath"))
config.get_item("acid_bath").add_usage(Electricity(12))
acid = Acid()
config.get_item("acid_bath").add_usage(acid)
acid.type = "hcl"
acid.grade = 5
print("Added acid_bath: " + str(config.get_item("acid_bath")))

config.add_item(Item("camera"))
config.get_item("camera").add_usage(Electricity(1))
print("Added camera: " + str(config.get_item("camera")))

config.add_item(Item("small_power_plant"))
config.get_item("small_power_plant").add_provision(Electricity(11))
config.get_item("small_power_plant").add_dependency(
    config.get_item("secure_air_vent"))
print("Added small_power_plant: " +
          str(config.get_item("small_power_plant")))

print("\nFinal " + str(config))

print("\nNow check Configuration, raise Exception if bad")
config.check()

print("\nNow force Exception")
trash_can = Item("trash_can")
trash_can.add_usage("GARBAGE IN")      # not a Resource
trash_can.add_provision("GARBAGE OUT") # not a Resource
config.add_item(trash_can)
config.check()
