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

namespace AskDossiers
{
    public class Customizer : MercatorUi.ICustomizers.IStringUpdater
    {
        /*
          * Deze klasse implementeert de interface IStringUpdater.
          * Hierdoor kunnen de 2 standaard SQL-opdrachten van Mercator worden gewijzigd.
          * Wordt gebruikt voor de dossierselectie
          */

        public string StringUpdate(string reqSql)
        {
            // reqSql zal een van deze 2 opdrachten bevatten
            // select id,nom,tri,isnew from DOSSIERS (NOLOCK) order by tri,id (tab 1)
            // select id, nom from DOSSIERS where (nom like '%'+@PARAM+'%') order by ID (tab 2)
            string whereclause;
            string mercatordossiers = Environment.GetEnvironmentVariable("mercatordossiers");
            if (string.IsNullOrEmpty(mercatordossiers))
            {
                Dialogs.Stop("De omgevingsvariabele \"mercatordossiers\" is niet geïnstalleerd. Om veiligheidsredenen wordt de toegang tot de Mercator-dossiers gedeactiveerd.");
                whereclause = "(1=0)";
            }
            else if (mercatordossiers == "all_dossiers") // in dit geval zijn alle dossiers toegankelijk
            {
                whereclause = "";
            }
            else // de geautoriseerde dossiers worden vermeld in een lijst, gescheiden door het teken |
            {
                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;
        }
    }
}