-- MealService: A three-party kitchen coordination protocol
-- Chef orchestrates SousChef (prep work) and Baker (oven/bread)

protocol MealService =
  roles Chef, SousChef, Baker

  -- Setup phase: request ingredients and confirm kitchen status
  Chef -> SousChef : IngredientRequest(String)
  SousChef -> Chef : DeliveryConfirm
  Chef -> Baker : OvenStatus(String)
  Chef -> SousChef : CourseRequest(String)
  SousChef -> Chef : CourseReady

  -- Cooking phase: Chef decides the dish, then coordinates preparation
  choice Chef at
    | Pasta =>
      Chef -> SousChef : BoilPasta
      SousChef -> Chef : PastaReady
      Chef -> Baker : PrepareGarlicBread
      Baker -> Chef : BreadReady
    | Tacos =>
      Chef -> SousChef : PrepTortillas
      SousChef -> Chef : TortillasReady
      Chef -> Baker : PrepareGarlicBread
      Baker -> Chef : BreadReady
