using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PrinterDemo
{
    class Program
    {
        static void ScanDataCallback(ref CyberImg data)
        {

        }

        static void ErrorReportCallback(int error, int type)
        {

        }

        static void PrintText()
        {
            CyberSC.ScSCalibrate(ConfigSettings.CV_CAL_STOPSCAN, 0);
            CyberSC.ScPOn();


            CyberSC.ScPPower(1);
            CyberSC.ScPString("Testing");
            CyberSC.ScPString("Testing1");
            CyberSC.ScPString("Testing2");
            CyberSC.ScPString("Testing3");

            CyberSC.ScPEnd("12345678", 3);
            CyberSC.ScPSynch();

            if(CyberSC.ScPError())
            {
                Console.WriteLine("Text Printed");
            }
            else
            {
                Console.WriteLine("Error Printing Text");
            }

            CyberSC.ScPOff();
            CyberSC.ScSCalibrate(ConfigSettings.CV_CAL_STARTSCAN, 0);
        }
        
        static void PrintPrn()
        {
            CyberSC.ScSCalibrate(ConfigSettings.CV_CAL_STOPSCAN, 0);
            CyberSC.ScPOn();

            CyberSC.ScPPower(1);

            CyberSC.ScPImage("../../cyv_Logo.prn");
            CyberSC.ScPEnd("12345678", 3);
            CyberSC.ScPSynch();

            if (CyberSC.ScPError())
            {
                Console.WriteLine("PRN Printed");
            }
            else
            {
                Console.WriteLine("Error Printing PRN");
            }


            CyberSC.ScPOff();
            CyberSC.ScSCalibrate(ConfigSettings.CV_CAL_STARTSCAN, 0);

        }

        static void PrintBitmap()
        {
            CyberSC.ScSCalibrate(ConfigSettings.CV_CAL_STOPSCAN, 0);
            CyberSC.ScPOn();
            CyberSC.ScPPower(1);


            using (var convert = new BitmapConvert("../../PrinterTest.png"))
            {
                CyberSC.ScPBmp(convert.BitmapPtr);
                CyberSC.ScPSynch();
            }

            CyberSC.ScPEnd("12345678", 3);
            CyberSC.ScPSynch();

            if (CyberSC.ScPError())
            {
                Console.WriteLine("BPM Printed");
            }
            else
            {
                Console.WriteLine("Error Printing BMP");
            }

            CyberSC.ScPOff();
            CyberSC.ScSCalibrate(ConfigSettings.CV_CAL_STARTSCAN, 0);
            
        }

        static void Main(string[] args)
        {
            CyberSC.ScInit(ScanDataCallback, ErrorReportCallback);

            var status = CyberSC.ScPStatus();
            if(status != 0)
            {
                Console.WriteLine(String.Format("Printer is in error state{0}", status));
            }
            else
            {
                Console.WriteLine("Printer Status OK");
            }

            PrintText();

            PrintPrn();

            PrintBitmap();

            Console.WriteLine("Finished. Press any key to end");
            Console.ReadKey();
        }
    }
}
