using Newtonsoft.Json.Linq;
using PTMedicalInsurance.Forms;
using PTMedicalInsurance.Helper;
using Spire.Pdf;
using Spire.Pdf.Print;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Printing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace PTMedicalInsurance.Business
{
    class LocalSettleBillPrintProcess : AbstractProcess
    {
        public override CallResult Process(JObject joInParam)
        {
            string errMsg = "";
            string insuAdmObj = JsonHelper.getDestValue(joInParam, "insuAdmObj");
            JObject joInsuAdmObj = JObject.Parse(insuAdmObj);
            JObject joRtn = invoker.invokeCenterService(TradeEnum.PrintSettlementList, joInsuAdmObj);

            if (JsonHelper.parseCenterRtnValue(joRtn, out errMsg) != 0)
            {
                return Exception("读卡失败:", errMsg);
            }
            else
            {
                // 仅有一个report映射到output节点
                string reportData = JsonHelper.getDestValue(joRtn, "output");
                if (!string.IsNullOrEmpty(reportData))
                {
                    PrintBase64Pdf(reportData);
                }
                return IrisReturn("打印成功",joRtn);
            }
        }

        public void PrintBase64Pdf(string base64Pdf)
        {
            string pdfFile = System.Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\bill.pdf";
            byte[] bytes = Convert.FromBase64String(base64Pdf);
            try
            {
                using (PdfDocument doc = new PdfDocument())
                {
                    File.WriteAllBytes(pdfFile, bytes);
                    doc.LoadFromFile(pdfFile);

                    PrintersForm printers = new PrintersForm();
                    if (printers.ShowDialog() == DialogResult.OK)
                    {
                        PdfPrintSettings settings = new PdfPrintSettings();
                        settings.PrinterName = printers.PrinterName;
                        settings.Landscape = printers.Landscape;
                        doc.Print(settings);
                    }
                   
                }
            }
            finally
            {
                if (File.Exists(pdfFile))
                {
                    File.Delete(pdfFile);
                }
            }
        }
    }
}