// 
// Copyright 2016 Agencia Estatal de Administración Tibutaria
//
// Licencia con arreglo a la EUPL, Versión 1.1 o -en cuanto
// sean aprobadas por la Comisión Europea- versiones
// posteriores de la EUPL (la «Licencia»);
// Solo podrá usarse esta obra si se respeta la Licencia.
// Puede obtenerse una copia de la Licencia en:
//  
// https://joinup.ec.europa.eu/software/page/eupl
//  
// Salvo cuando lo exija la legislación aplicable o se acuerde
// por escrito, el programa distribuido con arreglo a la
// Licencia se distribuye «TAL CUAL», SIN GARANTÍAS NI CONDICIONES
// DE NINGÚN TIPO, ni expresasni implícitas.
//
// Véase la Licencia en el idioma concreto que rige los permisos y 
// limitaciones que establece la Licencia.
// 

using System;
using System.Collections.Generic;
using System.Text;

namespace ateneo.utiles
{
    class Parametros
    {
        SortedList<string, Parametro> args = new SortedList<string, Parametro>();

        public Parametros(string[] ars) {
            for (int i = 0; i < ars.Length; i++) {
                Parametro p = new Parametro(ars[i], i);
                args[p.k] = p;
            }
        }

        public bool contiene(string par) {
            par = par.ToLower();
            return args.ContainsKey(par);
        }

        public void elimina(string par) {
            args.Remove(par.ToLower());
        }

        public bool contieneNoNulo(string par) {
            par = par.ToLower();
            return args.ContainsKey(par) && args[par] != null;
        }

        public string valor(string k) {
            return args[k.ToLower()].v;
        }

        public override string ToString() {
            string ss = "";
            if (args.Count > 0) {
                foreach(Parametro s in args.Values) {
                    ss += s + " ";
                }
            }
            return ss;
        }

        public string ToString2() {
            string ss = "";
            if (args.Count > 0) {
                foreach (Parametro s in args.Values) {
                    if (s.k.ToLower() != "ejecutarsindescargar") {
                        ss += s + " ";
                    }
                }
            }
            return ss;
        }

        public class Parametro
        {
            public string k;
            public string v = null;
            public string paramOriginal;
            public bool barrado = false;
            public int pos;

            public Parametro(string s, int pos) {
                paramOriginal = s;
                string[] pp = s.Split('=');
                k = pp[0].ToLower();
                if (k.StartsWith("/") || k.StartsWith("\\")) {
                    barrado = true;
                    k = k.Substring(1).Trim();
                }
                if (pp.Length > 1) {
                    v = pp[1].Trim();
                }
                this.pos = pos;
            }

            public override string ToString() {
                return paramOriginal;
            }
        }
    }
}
