using System;
using System.Windows;
using System.IO;
using System.Windows.Xps.Packaging;
using CodeReason.Reports;
//using ZXing;
//using ZXing.QrCode;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Media.Imaging;
using SSWMS.Common;

namespace SSWMS.Client
{
    public partial class PrintQRCode : Window
    {
        private string QRCode = string.Empty;
        public PrintQRCode(string sQRCode)
        {
            InitializeComponent();
            QRCode = sQRCode;
            Window_Loaded(null, null);
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            try
            {
                using (StreamReader reader = new StreamReader(new FileStream(AppDomain.CurrentDomain.BaseDirectory + @"@Files\Templates\QRCode.xaml", FileMode.Open, FileAccess.Read)))
                {
                    ReportDocument reportDocument = new ReportDocument()
                    {
                        XamlData = reader.ReadToEnd(),
                        XamlImagePath = Path.Combine(Environment.CurrentDirectory, @"@Files\Templates\")
                    };
                    reportDocument.ImageProcessing += ReportDocument_ImageProcessing;
                    reportDocument.ImageError += ReportDocument_ImageError;
                    ReportData data = new ReportData();
                    string[] asQRCode = this.QRCode.Split('-');
                    if (asQRCode.Length == 2)
                    {
                        data.ReportDocumentValues.Add("QRCodeText1", string.Format("{0}-{1}",
                            asQRCode[0], asQRCode[1]));
                        data.ReportDocumentValues.Add("QRCodeText2", string.Format("-{0}-{1}-{2}-{3}",
                            1, 2, 3, 4));
                    }
                    XpsDocument xps = reportDocument.CreateXpsDocument(data);
                    dvQRCode.Document = xps.GetFixedDocumentSequence();
                    reader.Close();
                }

            }
            catch (Exception ex)
            {
                MessageDialog.ShowException(ex);
                this.Close();
            }
        }

        private void ReportDocument_ImageError(object sender, ImageErrorEventArgs e)
        {
            e.Handled = true;
        }

        private void ReportDocument_ImageProcessing(object sender, ImageEventArgs e)
        {
            if (e.Image.Name == "QRCodeImage")
            {
                //IBarcodeWriter ibw = new BarcodeWriter()
                //{
                //    Format = BarcodeFormat.QR_CODE,
                //    Options = new QrCodeEncodingOptions
                //    {
                //        DisableECI = true,
                //        CharacterSet = "UTF-8"
                //    }
                //};
                //Bitmap bitmap = ibw.Write(this.QRCode);
                //if (bitmap != null)
                //{
                //    MemoryStream ms = new MemoryStream();
                //    bitmap.Save(ms, ImageFormat.Bmp);
                //    ms.Position = 0;
                //    bitmap.Dispose();

                //    BitmapImage bi = new BitmapImage();
                //    bi.BeginInit();
                //    bi.StreamSource = ms;
                //    bi.EndInit();
                //    e.Image.Source = bi;
                //}
            }
        }
    }
}