using System;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace TestupnSlikaQR
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Primer();
        }
        private void Primer()
        {
            // Pripravim vsebino QR po zahtevah standarda.
            // Vsebina v tem prieru je za nalog registriranih izdajateljev.            
            string sLF = "\n"; // Delimiter polj v vsebini QR.
            StringBuilder sb = new StringBuilder();
            sb.Append("UPNQR").Append(sLF);                   //  1. Vodilni slog
            sb.Append("").Append(sLF);                        //  2. IBAN plačnika
            sb.Append("").Append(sLF);                        //  3. Polog
            sb.Append("").Append(sLF);                        //  4. Dvig
            sb.Append("").Append(sLF);                        //  5. Referenca plačnika 
            sb.Append("Janez Novak").Append(sLF);             //  6. Ime plačnika
            sb.Append("Dunajska 1").Append(sLF);              //  7. Ulica in št. plačnika
            sb.Append("1000 Ljubljana").Append(sLF);          //  8. Kraj plačnika
            sb.Append("00000012363").Append(sLF);             //  9. Znesek 123,63
            sb.Append("").Append(sLF);                        // 10. Datum plačila
            sb.Append("").Append(sLF);                        // 11. Nujno
            sb.Append("COST").Append(sLF);                    // 12. Koda namena
            sb.Append("Obveznosti za 05/2017").Append(sLF);   // 13. Namen plačila 
            sb.Append("30.06.2017").Append(sLF);              // 14. Rok plačila
            sb.Append("SI56101000052423548").Append(sLF);     // 15. IBAN prejemnika
            sb.Append("SI129990000359896").Append(sLF);       // 16. Referenca prejemnika
            sb.Append("SZ Lepa Hiša").Append(sLF);            // 17. Ime prejemnika
            sb.Append("Ščavnica 12").Append(sLF);             // 18. Ulica in št. prejemnika
            sb.Append("1380 Ščavnica pri Dragi").Append(sLF); // 19. Kraj prejemnika
            // Izračunam kontrolno vsoto in jo pripnem.            
            string sKontrolnaVsota = sb.Length.ToString("000");
            sb.Append(sKontrolnaVsota).Append(sLF);           // 20. Kontrolna vsota

            // Pred izdelavo slike, preverim dolžino vsebine in združljivost z ISO 8859-2.
            string VsebinaQR = sb.ToString();
            // Preverim dolžino.
            if (VsebinaQR.Length > 411)
            {
                MessageBox.Show("Vsebina QR je predolga.");
                return;
            }
            // Preverim ali so v vsebini znaki, ki jih ni možno pretvoriti v ISO 8859-2.
            byte[] bytes = Encoding.GetEncoding("iso-8859-2").GetBytes(VsebinaQR);
            string sPrimerjava = Encoding.GetEncoding("iso-8859-2").GetString(bytes);
            if (!string.Equals(VsebinaQR, sPrimerjava))
            {
                MessageBox.Show("Vsebina QR vsebuje znake, ki niso združljivi z ISO 8859-2.");
                return;
            }
            // Določim sliko            
            Bitmap bmpSlikaQR = null;
            // Pripravim razred in vpišem Aktivacijsko kodo.
            // Če je Aktivacijska koda 'test' bo program izdelal pravilno kodo QR, 
            // vendar bo zamenjal prvi znak vsebine z '?'.
            big.IN.upnSlikaQR cSlikaQR = new big.IN.upnSlikaQR("test");
            // Izdelam sliko QR.
            if (!cSlikaQR.IzdelajSliko(VsebinaQR, out bmpSlikaQR))
            {
                // če je med delom prišlo do napake je opis v cSlikaQR.OpisNapake
                MessageBox.Show(cSlikaQR.OpisNapake);
                return;
            }
            // Prikažem sliko.
            pictureBox1.Image = bmpSlikaQR;

        }
    }
}
