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");

            // Récupération de l'id du rapport dans la table CurrentDocum
            string ID = ds.Tables["CurrentDocum"].Rows[0]["id"].ToString();
            //Déclaration de la variable contenant le nom du layout .rpt
            rapportcrystal = MercatorUi.Globals.RepData + "Crystal\\" + ID + ".rpt";
            //Création du fichier XML servant de base de données au rapport
            Api.DataSetToXmlFile(ds, MercatorUi.Globals.RepData + "Crystal\\" + ID + ".xml");
            // Propriétés StopProcess placé à True pour bloquer la prévisualisation du Layout dans Mercator
            customizerInfo.StopProcess = true;
            // Switch permettant d'éxucuter une commande différent selon l'action voulue
            if (customizerInfo.Info == MercatorUi.Reporting.CustomizerInfoEnum.RunReport)
            {
                // Création et affichage de la form selon la classe définie dans la dll CrystalForms
                Crystal.CrystalForm CrystalForm = new Crystal.CrystalForm(rapportcrystal);
                CrystalForm.Show(MercatorUi.Globals.iw);
            }
        }
        public bool ReportDesignBlock(DataRow dr_docum, DataSet ds)
        {      //Test sur la possibilité d'éxecution de lancement de crystal
            try
            {//Lancement de CrystalReport avec le bon layout
                // Récupération de l'id du rapport dans la table CurrentDocum
                string ID = ds.Tables["CurrentDocum"].Rows[0]["id"].ToString();
                //Déclaration de la variable contenant le nom du layout .rpt
                rapportcrystal = MercatorUi.Globals.RepData + "Crystal\\" + ID + ".rpt";

                if (!System.IO.File.Exists(rapportcrystal))
                {
                    Api.Stop("Pour pouvoir éxécuter cette action, veuillez créer un fichier ID_du_doc.rpt et le lier au fichier .Xml correspondant");
                }
                else
                {
                    System.Diagnostics.Process processus = new System.Diagnostics.Process();
                    processus.StartInfo.FileName = rapportcrystal;
                    processus.Start();
                    processus.Close();
                }
            }
            catch (Exception e)
            {
                Dialogs.Stop(e.Message);
            }
            // On renvoie True pour bloquer le processus normal de Mercator (page 1952 du site)
            return true;
        }
    }
}