using NHapi.Model.V24.Segment;
MSH|^~\&|AX90X^^EUI-64|AX90X^^EUI-64|||20230521120740537+0800||ORU^R40^ORU_R40|43|P|2.4|98||AL|NE||UNICODE UTF-8{newLine}
PID|||1235^^^^PI||SMITH^JOHN^^^^^L||20000101000000000+0800|M||||||||||||||||||||||||||||||||ADU{newLine}
PV1|||^^^||||||||||||||||||||||||||||||||||||||||20230303000000000+0800|||||||||||{newLine}
OBR|1||43^AX90X^^EUI-64|196616^MDC_EVT_ALARM^MDC|||20230521120740537+0800||||||||||||||||||||||^43{newLine}
OBX|1|CWE|196616^MDC_EVT_ALARM^MDC|1.7.0.196682.1|196680^MDC_EVT_LEADS_OFF^MDC||||||F|||20230521120740537+0800{newLine}
OBX|2|CWE|68480^MDC_ATTR_ALERT_SOURCE^MDC|1.7.0.196682.2|69953^MDC_DEV_MON_PT_PHYSIO_MULTI_PARAM_MDS^MDC||||||F{newLine}
OBX|3|ST|68481^MDC_ATTR_EVENT_PHASE^MDC|1.7.0.196682.3|start||||||F{newLine}
OBX|4|ST|68482^MDC_ATTR_ALARM_STATE^MDC|1.7.0.196682.4|active||||||F{newLine}
OBX|5|ST|68483^MDC_ATTR_ALARM_INACTIVATION_STATE^MDC|1.7.0.196682.5|^^||||||F{newLine}
OBX|6|ST|68484^MDC_ATTR_ALARM_PRIORITY^MDC|1.7.0.196682.6|PL||||||F{newLine}
OBX|7|ST|68485^MDC_ATTR_ALERT_TYPE^MDC|1.7.0.196682.7|ST||||||F{newLine}
OBX|8|ST|68486^MDC_ATTR_ALERT_THRESHOLD^MDC|1.7.0.196682.8|||||||F
var pipeParser = new PipeParser();
var parsed = pipeParser.Parse(message);
var terser = new Terser(parsed);
Console.WriteLine($"############USING TERSER############{Environment.NewLine}");
Console.WriteLine($"PID.3.1 [Patient Identifier List - ID]: {terser.Get("/PID-3-1")}");
Console.WriteLine($"PID.3.5 [Patient Identifier List - Identifier Type Code]: {terser.Get("/PID-3-5")}");
Console.WriteLine($"PID.5.1.1 [Patient Name - Family Name - Surname]: {terser.Get("/PID-5-1-1")}");
Console.WriteLine($"PID.5.2 [Patient Name - Given Name]: {terser.Get("/PID-5-2")}");
Console.WriteLine($"OBX(1).3.2 [Observation Identifier - Text]: {terser.Get("/OBX(0)-3-2")}");
Console.WriteLine($"OBX(2).3.2 [Observation Identifier - Text]: {terser.Get("/OBX(1)-3-2")}");
Console.WriteLine($"OBX(3).3.2 [Observation Identifier - Text]: {terser.Get("/OBX(2)-3-2")}");
var pid = ((PID)parsed.GetAll("PID")[0]);
var patientIdentifierList = pid.GetPatientIdentifierList(0);
var patientName = pid.GetPatientName(0);
Console.WriteLine($"{Environment.NewLine}############USING GENERIC MESSAGE############{Environment.NewLine}");
Console.WriteLine($"PID.3.1 [Patient Identifier List - ID]: {patientIdentifierList.ID}");
Console.WriteLine($"PID.3.5 [Patient Identifier List - Identifier Type Code]: {patientIdentifierList.IdentifierTypeCode}");
Console.WriteLine($"PID.5.1 [Patient Name - Family Name - Surname]: {patientName.FamilyName.Surname}");
Console.WriteLine($"PID.5.2 [Patient Name - Given Name]: {patientName.GivenName}");
var obxs = parsed.GetAll("OBX").Cast<OBX>().ToList();
Console.WriteLine($"OBX(1).3.2 [Observation Identifier - Text]: {obxs[0].ObservationIdentifier.Text}");
Console.WriteLine($"OBX(2).3.2 [Observation Identifier - Text]: {obxs[1].ObservationIdentifier.Text}");
Console.WriteLine($"OBX(3).3.2 [Observation Identifier - Text]: {obxs[2].ObservationIdentifier.Text}");