using APT.BaseData.Domain.Enums;
using APT.BaseData.Domain.Msg;
using APT.Infrastructure.Core;
using APT.BaseData.Domain.ApiModel;
using APT.BaseData.Domain.Entities.FM;
using APT.BaseData.Domain.Enums;
using APT.BaseData.Domain.IServices.FM;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using APT.Infrastructure.Api;
namespace APT.BaseData.Services.Services.FM
{
    public class FMAutoPrintRecordService: CommonService, IFMAutoPrintRecordService
	{
		public FMAutoPrintRecordService(IRepository repository)
			: base(repository)
		{
		}
		/// 添加打印参数
		/// 
		/// 
		/// 
		/// 
		/// 
		private T_FM_AUTO_PRINT_RECORD_DETAIL AddPrintParam(T_FM_AUTO_PRINT_RECORD printRecord, string paramName, string paramValue, List addPrintRecordDetails)
		{
			T_FM_AUTO_PRINT_RECORD_DETAIL printDetail = new T_FM_AUTO_PRINT_RECORD_DETAIL();
			printDetail.ORG_ID = printRecord.ORG_ID;
			printDetail.AUTO_PRINT_RECORD_ID = printRecord.ID;
			printDetail.PARAM_NAME = paramName;
			printDetail.PARAM_VALUE = paramValue;
			addPrintRecordDetails.Add(printDetail);
			return printDetail;
		}
		/// 
		/// 添加打印记录
		/// 
		/// 
		/// 
		/// 
		private T_FM_AUTO_PRINT_RECORD AddPrintRecord(AutoPrintParamModel param, List addPrintRecords)
		{
			T_FM_AUTO_PRINT_RECORD record = new T_FM_AUTO_PRINT_RECORD();
			record.PRINTER_COMPUTER_NAME = param.PrinterComputerName;
			record.PRINTER_NAME = param.PrinterName;
			record.PRINT_NUMBER = param.PrintNumber;
			record.PRINT_TIME = param.PrintTime;
			record.SOURCE_ID = param.SourceId;
			record.SOURCE_TYPE = param.SourceType;
			record.TEMPLET_FILE_NAME = param.TempletFileName;
			record.REMARK = param.Remark;
			record.ORG_ID = param.OrgId;
			addPrintRecords.Add(record);
			return record;
		}
		/// 
		/// 打印箱码(保存数据)
		/// 
		/// 箱码ID
		/// 打印机ID
		public void PrintBox(string id, string printerId)
		{
			if (string.IsNullOrEmpty(id))
				throw new Exception(ErrMsg.WH_NOEXIT_BOX_ID);
			AutoPrintParamModel param = new AutoPrintParamModel();
			if (!string.IsNullOrEmpty(printerId))
			{
				var printer = this.GetEntity(printerId);
				if (printer != null)
				{
					param.PrinterComputerName = printer.PRINTER_COMPUTER_NAME;
					param.PrinterName = printer.PRINTER_NAME; 
					param.TempletFileName = printer.TEMPLET_FILE_NAME;
				}
			}
			param.SourceId = new Guid(id);
			//param.SourceType = (int)PFCodeRuleType.箱码;
			if (string.IsNullOrEmpty(param.TempletFileName))
				param.TempletFileName = "box.btw";
			PrintBox(param);
		}
		/// 
		/// 打印箱码(保存数据)
		/// 
		/// 打印参数
		public void PrintBox(AutoPrintParamModel param)
		{
			List addPrintRecords = new List();
			List addPrintRecordDetails = new List();
			PrintBox(param, addPrintRecords, addPrintRecordDetails);
			if (addPrintRecords.Any())
				this.BantchAddEntity(addPrintRecords);
			if (addPrintRecordDetails.Any())
				this.BantchAddEntity(addPrintRecordDetails);
		}
		
		/// 
		/// 打印箱码(不保存数据)
		/// 
		/// 打印参数
		/// 自动打印记录
		/// 自动打印记录明细
		public void PrintBox(AutoPrintParamModel param, List addPrintRecords, List addPrintRecordDetails)
		{
			if (param.SourceId == null)
				throw new Exception(ErrMsg.WH_NOEXIT_BOX_ID);
			T_FM_AUTO_PRINT_RECORD record = new T_FM_AUTO_PRINT_RECORD();
			record.PRINTER_COMPUTER_NAME = param.PrinterComputerName;
			record.PRINTER_NAME = param.PrinterName;
			record.PRINT_NUMBER = param.PrintNumber;
			record.PRINT_TIME = param.PrintTime;
			record.SOURCE_ID = param.SourceId;
			record.SOURCE_TYPE = param.SourceType;
			record.TEMPLET_FILE_NAME = param.TempletFileName;
			record.REMARK = param.Remark;
			addPrintRecords.Add(record);
		}
    }
}