public override void PrintDocument(PrinterContext context)
        {
            Console.WriteLine($"Printed the document {context.Document}");
            context.Money--;

            if (context.Money > 0)
            {
                context.State = new ChooseDocumentState();
            }
            else
            {
                context.State = new PayState();
            }
        }
 public virtual void ChooseDocument(PrinterContext context)
 {
     throw new NotImplementedException();
 }
 public virtual void Pay(PrinterContext context)
 {
     throw new NotImplementedException();
 }
 public override void GetCash(PrinterContext context)
 {
     throw new Exception("Interaction is stopped");
 }
 public override void PrintDocument(PrinterContext context)
 {
     throw new Exception("Interaction is stopped");
 }
 public override void ChooseDevice(PrinterContext context)
 {
     throw new Exception("Interaction is stopped");
 }
 public override void GetCash(PrinterContext context)
 {
     context.Money = 0;
     context.State = new StoppedState();
 }
 public override void Stop(PrinterContext context)
 {
     context.State = new GetCashState();
 }
 public override void ChooseDocument(PrinterContext context)
 {
     Console.WriteLine($"Chose the document {context.Document}");
     context.State = new PrintDocumentState();
 }
 public override void ChooseDevice(PrinterContext context)
 {
     Console.WriteLine($"Chose the device type {context.DeviceType}");
     context.State = new ChooseDocumentState();
 }
 public override void Pay(PrinterContext context)
 {
     Console.WriteLine($"Payed the money {context.State}");
     context.State = new ChooseDeviceState();
 }
 public override void Start(PrinterContext context)
 {
     context.State = new PayState();
 }
 public virtual void Stop(PrinterContext context)
 {
     context.State = new StoppedState();
 }