using BBWY.Client.Helpers;
using BBWY.Client.Models;
using BBWY.Controls;
using NPOI.SS.UserModel;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Printing;
using System.IO;
using System.Linq;
using System.Printing;
using System.Runtime.ConstrainedExecution;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Interop;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Media.Media3D;
using System.Windows.Shapes;
using System.Drawing.Printing;

namespace BBWY.Client.Views.PackTask
{
    /// <summary>
    /// PrintWindow.xaml 的交互逻辑
    /// </summary>
    public partial class PrintWindow : BWindow
    {
        public PrintWindow()
        {
            InitializeComponent();
            LoadPrints();

        }
        /// <summary>
        /// 获取打印机名称
        /// </summary>
        private void LoadPrints()
        {
            var printingNames = PrinterSettings.InstalledPrinters;//获取本机的打印机数据
            int index = -1;
            int selectIndex = 0;
            foreach (string name in printingNames)
            {
                if (name == "Microsoft XPS Document Writer" || name == "Microsoft Print to PDF" || name == "Fax")
                {
                    continue;
                }
                index++;
                if (name.Contains("Deli"))
                {
                    selectIndex = index;
                }
                cbPrints.Items.Add(name);
            }
            if (cbPrints.Items.Count > selectIndex)
            {
                cbPrints.SelectedIndex = selectIndex;
            }
        }




        /// <summary>
        /// 加载预览打印数据
        /// </summary>
        public void LoadData()
        {
            // PrintData data  = new PrintData();
            if (CertificateModel != null)
            {
                this.DataContext = CertificateModel;
                bar.Visibility = Visibility.Collapsed;
                cer.Visibility = Visibility.Visible;
            }

            if (BarCodeModel != null)
            {
                this.DataContext = BarCodeModel;
                cer.Visibility = Visibility.Collapsed;
                bar.Visibility = Visibility.Visible;
            }
        }

        public CertificateModel CertificateModel { get; set; }

        public BarCodeModel BarCodeModel { get; set; }

        private void BButton_Click(object sender, RoutedEventArgs e)
        {
            int printCount = 0;
            try
            {
                printCount = Convert.ToInt32(tbCount.Text);
            }
            catch
            {
                new TipsWindow("请输入打印份数", 1).ShowDialog();
                return;
            }

            string printName = cbPrints.Text;//选择的要打印的打印机名称

            Task.Factory.StartNew(() =>
            {
                try
                {

                    PrintDocument document = new PrintDocument();
                    document.PrinterSettings.PrinterName = printName;//使用打印机名称,指定特定的打印机进行打印。
                    //设置打印页面
                    //document.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("Custom", 236, 157);
                    document.PrintPage += Document_PrintPage;
                    document.PrinterSettings.Copies = (short)printCount;//打印份数
                    document.Print();

                }
                catch (Exception ex)
                {
                    App.Current.Dispatcher.Invoke(() =>
                    {
                        new TipsWindow("打印失败").ShowDialog();
                    });

                }
            });

        }


        private void Document_PrintPage(object sender, PrintPageEventArgs args)
        {
            //RectangleF bounds = new RectangleF(0, 0, 236, 157);
            //args.Graphics.SetClip(bounds);//设置打印区域




            //设置 打印纸张类型
            //var paperSizes = args.PageSettings.PrinterSettings.PaperSizes;


            //foreach (System.Drawing.Printing.PaperSize item in paperSizes)
            //{
            //    if (item.Height==157)
            //    {
            //        args.PageSettings.PaperSize=item;
            //        break;
            //    }
            //}
            //var sss = args.PageSettings.PaperSize;
            //默认设置 打印类型



#if DEBUG
            //打印 纵向打印  会模糊
            //args.PageSettings.PrinterSettings.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("Custom", 236, 157);
            //args.PageSettings.PrinterSettings.DefaultPageSettings.Landscape = true;

            //Bitmap bitmap = new Bitmap(236,157);
#endif

            Font font = new Font("宋体", 6, System.Drawing.FontStyle.Regular);
            if (BarCodeModel != null)
            {
                MyPrintHelper.PrintBarcode(ref args, BarCodeModel, font);
            }
            if (CertificateModel != null)
            {
                MyPrintHelper.PrintCertificate(ref args, CertificateModel, font);
            }

        }
    }

    public class PrintData
    {
        public CertificateModel CertificateModel { get; set; }

        public BarCodeModel BarCodeModel { get; set; }

    }


}