using Newtonsoft.Json;
using System;
using System.IO;
using System.Text;
using Vinno.IUS.Common.Configuration;
using Vinno.IUS.Common.Log;
using Vinno.vCloud.Protocol.Infrastructures;
using WingInterfaceLibrary.DTO.Comment;
using WingInterfaceLibrary.DTO.Measure;
using WingInterfaceLibrary.Interface;
namespace Vinno.vCloud.Common.FIS.Remedicals
{
static class vCloudScanData2Serializer
{
///
/// Serialize scan data content to a file.
///
/// the scan data.
/// The file path to store the content.
public static void Serialize(this vCloudScanDataV2 data, string filePath)
{
var stringBuilder = new StringBuilder();
stringBuilder.AppendLine("[ScanData]");
//Id
stringBuilder.AppendLine($"Id = {data.Id}");
if (!string.IsNullOrEmpty(data.ExamRecordId))
{
stringBuilder.AppendLine($"ExamRecordId = {data.ExamRecordId}");
}
//examId
stringBuilder.AppendLine($"ExamId = {data.ExamId}");
//workOrderId
stringBuilder.AppendLine($"WorkOrderId = {data.WorkOrderId}");
//DataType
stringBuilder.AppendLine($"DataType = {data.DataType}");
//Description
stringBuilder.AppendLine($"Description = {data.Description}");
//Application
stringBuilder.AppendLine($"Description = {data.Application}");
//ApplicationCategory
stringBuilder.AppendLine($"Description = {data.ApplicationCategory}");
//FilePath
stringBuilder.AppendLine($"VidFilePath = {data.VidFilePath}");
//Status
stringBuilder.AppendLine($"Status = {data.Status}");
//PatientInfo
var patientInfo = data.PatientInfo;
if (patientInfo != null)
{
var patientInfoString = JsonConvert.SerializeObject(data.PatientInfo);
stringBuilder.AppendLine($"PatientInfo = {patientInfoString}");
}
var measuredResults = data.MeasuredResults;
if (measuredResults != null)
{
var measuredResultsString = JsonConvert.SerializeObject(data.MeasuredResults);
stringBuilder.AppendLine($"MeasuredResults = {measuredResultsString}");
}
var commentResults = data.CommentResults;
if (commentResults != null)
{
var commentResultsString = JsonConvert.SerializeObject(data.CommentResults);
stringBuilder.AppendLine($"CommonResults = {commentResultsString}");
}
File.WriteAllText(filePath, stringBuilder.ToString());
}
///
/// Deserialize a scan data from a file.
///
/// The leaf to create the scan data.
///
///
public static vCloudScanDataV2 Deserialize(IRemedicalService remedicalService, IStorageService storageService, string token, string scanDataFilePath)
{
if (File.Exists(scanDataFilePath))
{
try
{
var configContent = File.ReadAllText(scanDataFilePath);
var configLoader = new ConfigLoader();
var sections = configLoader.LoadConfig(configContent);
var id = string.Empty;
var examId = string.Empty;
var examRecordId = string.Empty;
var workOrderId = string.Empty;
var filePath = string.Empty;
var dataType = VidType.VinnoVidSingle;
var description = string.Empty;
var application = string.Empty;
var applicationCategory = string.Empty;
var status = UploadStatus.Idle;
var patientInfo = new PatientScanInfo();
MeasuredResultsDTO measuredResults = null;
ScanImageDTO commentResults = null;
foreach (var section in sections)
{
switch (section.Name)
{
case "ScanData":
{
foreach (var item in section.Items)
{
switch (item.Key)
{
case "Id":
id = item.Value;
break;
case "ExamId":
examId = item.Value;
break;
case "WorkOrderId":
workOrderId = item.Value;
break;
case "DataType":
Enum.TryParse(item.Value, out dataType);
break;
case "Description":
description = item.Value;
break;
case "Application":
application = item.Value;
break;
case "ApplicationCategory":
applicationCategory = item.Value;
break;
case "Status":
Enum.TryParse(item.Value, out status);
break;
case "ExamRecordId":
examRecordId = item.Value;
break;
case "VidFilePath":
filePath = item.Value;
break;
case "PatientInfo":
patientInfo = JsonConvert.DeserializeObject(item.Value);
break;
case "MeasuredResults":
measuredResults = JsonConvert.DeserializeObject(item.Value);
break;
case "CommentResults":
commentResults = JsonConvert.DeserializeObject(item.Value);
break;
}
}
}
break;
}
}
var record = new vCloudExamRecord(examRecordId, examId, workOrderId);
var scanData = new vCloudScanDataV2(record, id, filePath, dataType, description, patientInfo, status, remedicalService, storageService, token, measuredResults, commentResults);
return scanData;
}
catch (Exception ex)
{
Logger.WriteLineError($"Load scan data2 error: {ex}");
}
}
return null;
}
}
}