using System.Collections.Generic;
public static void Main()
var shop = new ConsignmentShop();
public string Name {get;set;}
public string Description {get;set;}
public decimal Price {get;set;}
public bool IsSold {get;set;}
public bool IsPaymentDone {get;set;}
public Vendor Vendor {get;set;}
public int Stock {get;set;}
public override string ToString(){
return $"{this.Name} {this.Price}";
public string FirstName {get;set;}
public string LastName {get;set;}
public decimal Commission {get;set;}
public decimal PaymentDue {get;set;}
public override string ToString(){
return $"{this.FirstName} {this.LastName}";
public string Name{get;set;}
public string City{get;set;}
public string ZipCode{get;set;}
public string Country{get;set;}
public string Address1{get;set;}
public string Address2{get;set;}
public List<Vendor> Vendors{get; private set;}
public List<Item> Items {get;private set;}
this.Vendors = new List<Vendor>();
this.Items = new List<Item>();
public void AddVendor(Vendor vendor){
this.Vendors.Add(vendor);
public void AddItem(Item item){
public class ConsignmentShop{
private List<KeyValuePair<Item, int>> ItemsInShoppingCart{get;set;}
private Store store {get;set;}
public ConsignmentShop(){
this.ItemsInShoppingCart = new List<KeyValuePair<Item, int>>();
private void SetupStore(){
this.store = new Store{Name= "My Store"};
this.store.AddVendor(new Vendor{FirstName = "Vladimir", LastName = "Gerasimenok", Commission = 0.2m, PaymentDue = 0});
this.store.AddVendor(new Vendor{FirstName = "Raja", LastName = "Mani", Commission = 0.3m, PaymentDue = 0});
this.store.AddItem(new Item{Name = "C# in a Nutshell", Description = "A book from O'Reiley", Price = 50.0m, IsSold = false, IsPaymentDone = false, Vendor = this.store.Vendors[0], Stock = 10});
this.store.AddItem(new Item{Name = "Apple AirPods", Description = "Headphones from Apple", Price = 250.0m, IsSold = false, IsPaymentDone = false, Vendor = this.store.Vendors[1], Stock = 5});
this.store.AddItem(new Item{Name = "Samsung Galyx S20+", Description = "Samsung phone", Price = 1200.0m, IsSold = false, IsPaymentDone = false, Vendor = this.store.Vendors[0], Stock = 3});
this.store.AddItem(new Item{Name = "iMac 2011", Description = "A computer from Apple", Price = 575.0m, IsSold = false, IsPaymentDone = false, Vendor = this.store.Vendors[1], Stock = 2});
this.store.AddItem(new Item{Name = "AOC AG352UCG", Description = "AOC Ultrawide monitor", Price = 790.0m, IsSold = false, IsPaymentDone = false, Vendor = this.store.Vendors[0], Stock = 5});
Console.WriteLine(this.store.Name);
foreach( var item in this.store.Items){
Console.WriteLine($"{index++}. {item.Name}");
Console.WriteLine("A - Add item to shoppping cart");
Console.WriteLine("L - List items in shoppping cart");
Console.WriteLine("O - Order items in shopping cart");
Console.WriteLine("X - Exit");
Console.WriteLine("Enter your choice");
var choice = Console.ReadLine();
Console.WriteLine("Enter Item number, quantity");
var itemInfo = Console.ReadLine();
int itemIndex = Convert.ToInt32(itemInfo.Split(',')[0]);
int quantity = Convert.ToInt32(itemInfo.Split(',')[1]);
if(this.store.Items[itemIndex].Stock >= quantity){
this.ItemsInShoppingCart.Add(new KeyValuePair<Item,int>(this.store.Items[itemIndex], quantity));
this.store.Items[itemIndex].Stock -= quantity;
Console.WriteLine($"Sorry, the item {this.store.Items[itemIndex].Name} is out of stock! Remaining Items: {this.store.Items[itemIndex].Stock}");
foreach(var item in this.ItemsInShoppingCart){
Console.WriteLine($"{item.Key.Name} X {item.Value} = {item.Key.Price * item.Value}");
foreach(var item in this.ItemsInShoppingCart){
item.Key.Vendor.PaymentDue += item.Key.Vendor.Commission * (item.Value * item.Key.Price);
storeProfit += (item.Value * item.Key.Price) * (1 - item.Key.Vendor.Commission);
Console.WriteLine($"{item.Key.Name} X {item.Value} = {item.Key.Price * item.Value}");
foreach(var vendor in this.store.Vendors){
Console.WriteLine($"Vendor Profit: {vendor.ToString()}: {vendor.PaymentDue}");
Console.WriteLine($"Store Profit: {storeProfit}");