using System;
using HDL_ON_iOS;
using Shared;
using ZXing.Mobile;

namespace HDL_ON
{
    public class Scan
    {

        public Scan()
        {
        }

        static MobileBarcodeScanner scanner;
        public static async void OpenScan(Action<string> action)
        {
            string cancel = "取消";
            string flashText = "";
            string titleText = "二维码扫描";
            if (Language.CurrentLanguage != "Chinese")
            {
                cancel = "Cancel";
                flashText = "";
                titleText = "Scan";
            }

            if (scanner == null)
            {
                var mZXingOverlayView = new ZXingOverlayView(cancel, flashText, titleText);
                scanner = new MobileBarcodeScanner(AppDelegate.rootViewController) { FlashButtonText = flashText, TopText = titleText, BottomText = "", CancelButtonText = cancel };
                scanner.UseCustomOverlay = true;

                scanner.CustomOverlay = mZXingOverlayView;
                var bOn = false;
                mZXingOverlayView.OnCancel += () =>
                {

                    scanner?.Cancel();
                };

                mZXingOverlayView.OnTorch += () =>
                {
                    bOn = !bOn;
                    scanner?.Torch(bOn);
                };

            }

            var result = await scanner.Scan();

            if (result != null)
                action?.Invoke(result.Text);
            else
                action?.Invoke(null);
        }

        public static byte[] BytesFromText(string text, int width = 300, int height = 300)
        {
            var barcodeWriter = new ZXing.Mobile.BarcodeWriter
            {
                Format = ZXing.BarcodeFormat.QR_CODE,
                Options = new ZXing.Common.EncodingOptions
                {
                    Width = width,
                    Height = height,
                    Margin = 0
                }
            };

            barcodeWriter.Renderer = new ZXing.Mobile.BitmapRenderer();
            var uiImage = barcodeWriter.Write(text);
            var data = uiImage.AsJPEG();

            var resultBytes = new byte[data.Length];
            System.Runtime.InteropServices.Marshal.Copy(data.Bytes, resultBytes, 0, resultBytes.Length);

            return resultBytes;
        }


        //public static void OpenScan(Action<string> action)
        //{

        //    var scanner = new MobileBarcodeScanner(BaseViewController.Instance) { };
        //    // ZXing  
        //    scanner.UseCustomOverlay = false;
        //    // 底部两个按钮文字  
        //    scanner.FlashButtonText = "";//"识别";
        //    scanner.CancelButtonText = Language.CurrentLanguage == "Chinese" ? "取消" : "Cancel";

        //    // 方框上,下方文字提示  
        //    //scanner.TopText = Language.CurrentLanguage == "Chinese" ? "请将条形码对准方框内" : "Please align the bar code in the scan box";
        //    scanner.BottomText = "";

        //    // 延时三秒自动扫秒  
        //    var opt = new MobileBarcodeScanningOptions();
        //    opt.DelayBetweenContinuousScans = 3000;
        //    scanner.ScanContinuously(opt, (obj) => {
        //        scanner.Cancel();
        //        if (action != null)
        //        {
        //            action(obj.Text);
        //        }
        //    });
        //}
    }
}