using System;
using System.Collections.Generic;
using System.Text;
using MercatorUi;
using MercatorApi;
using System.Linq;

namespace AskDossiers
{
    public class Customizer : MercatorUi.ICustomizers.IStringUpdater
    {
        /*
         * Cette classe implémente l'interface IStringUpdater.
         * Ceci permettra de modifier les 2 requêtes SQL standards de Mercator,
         * utilisée pour la sélection des dossiers
         */

        public string StringUpdate(string reqSql)
        {
            // reqSql va contenir une de ces 2 requêtes
            // select id,nom,tri,isnew from DOSSIERS (NOLOCK) order by tri,id (premier onglet)
            // select id, nom from DOSSIERS where (nom like '%'+@PARAM+'%') order by ID (second onglet)
            string whereclause;
            string mercatordossiers = Environment.GetEnvironmentVariable("mercatordossiers");
            if (string.IsNullOrEmpty(mercatordossiers))
            {
                Dialogs.Stop("La variable d'environnement \"mercatordossiers\" n'est pas installée. Pour des raisons de sécurité, l'accès aux dossiers de Mercator est désactivé.");
                whereclause = "(1=0)";
            }
            else if (mercatordossiers == "all_dossiers") // dans ce cas, on autorise l'accès à tous les dossiers
            {
                whereclause = "";
            }
            else // les dossiers autorisés sont repris dans une liste dont le séparateur est |
            {
                string[] array_dossiers = mercatordossiers.Split('|');
                whereclause = string.Format("(id in '{0}')", string.Join("','", array_dossiers.Where(d => !string.IsNullOrWhiteSpace(d)).Select(d => Api.UnquoteSql(d))));
            }
            if (whereclause != "")
            {
                if (reqSql.Contains("where"))
                    reqSql = reqSql.Replace("where", "where " + whereclause + " and");
                else
                    reqSql = reqSql.Replace("order by", "where " + whereclause + " order by");
            }
            return reqSql;
        }
    }
}