using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorController;
// <ReferenceInclude>"Crystal.dll"</ReferenceInclude>
using Crystal;

namespace MercatorUi.Reporting
{
    public class Customizer : MercatorUi.ICustomizers.IDataSetForReportUpdater, MercatorUi.ICustomizers.IReportDesignBlocker
    {
        private string rapportcrystal;

        public void DataSetForReportUpdate(DataSet ds, MercatorUi.Reporting.CustomizerInfo customizerInfo)
        {
            if (!System.IO.Directory.Exists(MercatorUi.Globals.RepData + "Crystal"))
                System.IO.Directory.CreateDirectory(MercatorUi.Globals.RepData + "Crystal");

            // Ophalen van het id van het rapport in de tabel CurrentDocum
            string ID = ds.Tables["CurrentDocum"].Rows[0]["id"].ToString();
            // Declaratie van de variabele die de naam van de layout .rpt bevat
            rapportcrystal = MercatorUi.Globals.RepData + "Crystal\\" + ID + ".rpt";
            // Aanmaak van het XML-bestand dat als database voor het rapport dient
            Api.DataSetToXmlFile(ds, MercatorUi.Globals.RepData + "Crystal\\" + ID + ".xml");
            // Eigenschap StopProcess op True geplaatst om de voorvertoning van de Layout in Mercator te blokkeren
            customizerInfo.StopProcess = true;
            // Switch waarmee een verschillend commando uitgevoerd kan worden naargelang de gewenste actie
            if (customizerInfo.Info == MercatorUi.Reporting.CustomizerInfoEnum.RunReport)
            {
                // Aanmaak en weergave van de form volgens de klasse gedefinieerd in de dll CrystalForms
                Crystal.CrystalForm CrystalForm = new Crystal.CrystalForm(rapportcrystal);
                CrystalForm.Show(MercatorUi.Globals.iw);
            }
        }
        public bool ReportDesignBlock(DataRow dr_docum, DataSet ds)
        {      // Test op de mogelijkheid om Crystal te starten
            try
            {// Opstarten van CrystalReport met de juiste layout
                // Ophalen van het id van het rapport in de tabel CurrentDocum
                string ID = ds.Tables["CurrentDocum"].Rows[0]["id"].ToString();
                // Declaratie van de variabele die de naam van de layout .rpt bevat
                rapportcrystal = MercatorUi.Globals.RepData + "Crystal\\" + ID + ".rpt";

                if (!System.IO.File.Exists(rapportcrystal))
                {
                    Api.Stop("Om deze actie te kunnen uitvoeren, gelieve een bestand ID_du_doc.rpt aan te maken en te koppelen aan het overeenkomstige .Xml-bestand");
                }
                else
                {
                    System.Diagnostics.Process processus = new System.Diagnostics.Process();
                    processus.StartInfo.FileName = rapportcrystal;
                    processus.Start();
                    processus.Close();
                }
            }
            catch (Exception e)
            {
                Dialogs.Stop(e.Message);
            }
            // We geven True terug om het normale proces van Mercator te blokkeren (pagina 1952 van de site)
            return true;
        }
    }
}