namespace Inspectron.Epson.PrintServer.Printers.Utils; public class KitchenReceiptPrinter { private readonly int _lineWidth; private readonly int _bigFontLineWidth; public KitchenReceiptPrinter(int lineWidth = 42, int bigFontLineWidth = 21) { _lineWidth = lineWidth; _bigFontLineWidth = bigFontLineWidth; } public List ConvertToCommands(TranslatedKitchenReceipt receipt) { var commands = new List(); // Header: "Warme Küche" - Big, Bold, Red, Centered commands.Add(new KitchenPrintCommand { Text = Center(receipt.Location, isBigFont: true), IsBig = true, IsBold = true, IsRed = true }); commands.Add(Separator()); // Date and Owner info - Normal, Left-aligned commands.Add(new KitchenPrintCommand { Text = Center(receipt.Date,false) }); var ownerLines = receipt.Owner.Split('\n'); foreach (var line in ownerLines) { commands.Add(new KitchenPrintCommand { Text = Center(line, false) }); } // Table number - Big, Bold, Centered commands.Add(new KitchenPrintCommand { Text = Center($"Tisch: {receipt.Tisch}", isBigFont: true), IsBig = true, IsBold = true }); commands.Add(Separator()); // Items - Left-aligned foreach (var item in receipt.items) { if (item is KitchenProduct kp) { commands.Add(new KitchenPrintCommand { Text = $"{kp.Amount}x {item.Name}" }); } if(item is KitchenGang kg) { commands.Add(new KitchenPrintCommand { IsRed = true, IsBig = true, IsBold = true, Text = Center(item.Name,true) }); } } commands.Add(Separator()); return commands; } private KitchenPrintCommand Separator() { return new KitchenPrintCommand { Text = new string('-', _lineWidth) }; } private string Center(string text, bool isBigFont) { int effectiveLineWidth = isBigFont ? _bigFontLineWidth : _lineWidth; if (string.IsNullOrEmpty(text) || text.Length >= effectiveLineWidth) return text; int totalPadding = effectiveLineWidth - text.Length; int leftPadding = totalPadding / 2; return new string(' ', leftPadding) + text; } }