using System;
using Hiperscan.ApoIdentCore.Reporting.Protocol;
using Hiperscan.PdfLib;

namespace Hiperscan.ApoIdentCore.Reporting.Protocol.CertificateCheck
{
    public class DeDECertificationControl : IDraw
    {
        public bool Draw(PdfArgs args)
        {
            args.Layout.SetFont(PdfFontTypes.HELVETICA_BOLD, args.ReferenceFontSize, PdfColors.Black);
            args.Layout.XPosition = 0;
            if (args.Layout.AddParagraph("Ergebnis der Prüfung des Zertifikates") == false)
                return false;

            args.Layout.SetFont(PdfFontTypes.HELVETICA, args.ReferenceFontSize, PdfColors.Black);
            double indent = 5;

            args.Layout.Feed(3);

            for (int i = 1; i <= 4; i++)
            {
                args.Layout.Feed(args.Layout.ParagraphBoundingBox.Height + args.ReferenceLineDistance + 2);
                args.Layout.XPosition = indent;

                if (this.DrawSquare(args) == false)
                    return false;

                args.Layout.XPosition = indent + 1.5 * args.ReferenceFontSize;
                if (args.Layout.AddParagraph(this.GetText(i)) == false)
                    return false;
            }

            args.Layout.Feed(args.Layout.ParagraphBoundingBox.Height + args.ReferenceLineDistance + 7);

            return true;
        }

        private bool DrawSquare(PdfArgs args)
        {
            PdfRect sqaure = new PdfRect(args.Layout.XPosition, args.Layout.YPosition,
                    args.ReferenceFontSize, args.ReferenceFontSize);

            return args.Layout.AddRectangle(sqaure, 0.5, PdfColors.Black);
        }

        private string GetText(int number)
        {

            switch(number)
            {
                case 1:
                    return "Das Zertifikat wurde geprüft. Der Ausgangsstoff entspricht den in der Prüfvorschrift genannten Anforderungen.";

                case 2:
                    return "Bei Wirkstoffen: Das Prüfzertifikat gibt Auskunft über die GMP-konforme Herstellung des Ausgangsstoffs.";

                case 3:
                    return "Bei Wirkstoffen: Das Prüfzertifikat gibt keine Auskunft über die GMP-konforme Herstellung des Ausgangsstoffs.";

                case 4:
                    return "Das Zertifikat wurde geprüft. Der Ausgangsstoff entspricht nicht den in der Prüfvorschrift genannten Anforderungen.";


                default:
                    return String.Empty;
            }
        }
    }
}
