using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net.NetworkInformation;
using System.Text;
using System.Threading.Tasks;
using QRCoder;
using SixLabors.ImageSharp.Formats.Png;
using SixLabors.ImageSharp.PixelFormats;
//using System.IO;
using ZXing;

namespace Ropin.Core.Common
{
    public class QRCoderHelper
    {
        ///// <summary>
        ///// 生成二维码
        ///// </summary>
        ///// <param name="value">二维码保存的值</param>
        ///// <param name="level"></param>
        //public static string RenderQrCode(string value,string level,string linsence)
        //{
        //    Bitmap img = null;
        //    string path;
        //    QRCodeGenerator.ECCLevel eccLevel = (QRCodeGenerator.ECCLevel)(level == "L" ? 0 : level == "M" ? 1 : level == "Q" ? 2 : 3);
        //    using (QRCodeGenerator qrGenerator = new QRCodeGenerator())
        //    using (QRCodeData qrCodeData = qrGenerator.CreateQrCode(value, eccLevel))
        //    using (QRCode qrCode = new QRCode(qrCodeData))
        //    {
        //        img = qrCode.GetGraphic(20);
        //        var relativePath = Path.Combine("wwwroot/uploads/Files/", linsence + "/" + DateTime.Now.ToString("yyyyMM"));
        //        var directoryPath = Path.Combine(Directory.GetCurrentDirectory(), relativePath);
        //        if (!Directory.Exists(directoryPath))
        //        {
        //            Directory.CreateDirectory(directoryPath);
        //        }
        //        path = Path.Combine("/" + relativePath + "/", value + ".png");
        //        img.Save(directoryPath + "/" + value + ".png");
        //    }
        //    return path;
        //}

        /// <summary>
        /// 生成二维码
        /// </summary>
        /// <param name="value">value</param>
        /// <param name="barcodeFormat">生成的类型 CODE_39/ CODE_93/ CODE_128/ QR_CODE   ....</param>
        /// <param name="pathUrl">保存路径</param>
        /// <param name="fileName">文件名字</param>
        /// <param name="width">二维码宽,默认500</param>
        /// <param name="height">二维码高,默认500</param>
        public static string RenderQrCode(string value, string level, string linsence, int width = 500, int height = 500)
        {
            string path;
            //if(level == "M")
            var barcodeFormat = "QR_CODE";
            var barcodeFormatType = (BarcodeFormat)Enum.Parse(typeof(BarcodeFormat), barcodeFormat);
            var writer = new ZXing.ImageSharp.BarcodeWriter<Rgba32>
            {

                Format = barcodeFormatType,
                Options = new ZXing.QrCode.QrCodeEncodingOptions
                {
                    DisableECI = true,
                    CharacterSet = "UTF-8",
                    Width = width,
                    Height = height,
                    Margin = 1
                }
            };
            var image = writer.WriteAsImageSharp<Rgba32>(value);
            var ms = new MemoryStream();
            image.Save(ms, new PngEncoder());
            //pathUrl = pathUrl + "/";
            var relativePath = Path.Combine("wwwroot/uploads/Files/", linsence + "/" + DateTime.Now.ToString("yyyyMM"));
            var directoryPath = Path.Combine(Directory.GetCurrentDirectory(), relativePath);
            if (!Directory.Exists(directoryPath))
            {
                Directory.CreateDirectory(directoryPath);
            }
            path = Path.Combine("/" + relativePath + "/", value + ".png");
            //img.Save(directoryPath + "/" + value + ".png");
            using (var fileStream = File.Create(directoryPath + "/" + value + ".png"))
            {
                ms.Seek(0, SeekOrigin.Begin);
                ms.CopyTo(fileStream);
            }
            return path;
        }
    }
}