package commons.script.lang;

import basics.collections.TypedValueMap;
import basics.utl.SUtl;

public class Arguments
{
public static final String ARG0KEY          = "ARG0";
public static final String SEPARATOR_KEYVAL = ":";
public static final String SEPARATOR_ARGS   = ";";
TypedValueMap              argumentMap      = null;

public Arguments(String input)
{
   parse(input);
}

public int size()
{
   return 0;
}

public TypedValueMap getArgumentMap()
{
   return argumentMap;
}

private void parse(String input)
{
   argumentMap = new TypedValueMap();
   boolean quoting = false;
   String key = ARG0KEY;
   StringBuilder b = new StringBuilder();
   boolean empty = true;
   // remove outer parenthesis
   if(input.length() > 2)
      input = input.substring(1, input.length() - 1);
   for(int i = 0; i < input.length(); i++)
   {
      String c = input.substring(i, i + 1);
      if(c.equals("\""))
         quoting = !quoting;
      else
      {
         if(quoting)
            b.append(c);
         else
         {
            if(c.equals(SEPARATOR_ARGS))
            {
               argumentMap.put(key, b.toString());
               b = new StringBuilder();
               key = "";
               empty = true;
            }
            else
               if(c.equals(SEPARATOR_KEYVAL))
               {
                  key = b.toString();
                  b = new StringBuilder();
               }
               else
               {
                  b.append(c);
                  if(empty)
                     empty = false;
               }
         }
      }
   }
   if(!empty)
      argumentMap.put(key, b.toString());
}

public Arguments clone()
{
   Arguments newargs = new Arguments("");
   newargs.argumentMap = argumentMap.clone();
   return newargs;
}

public String toString()
{
   return SUtl.join(argumentMap.getAsMap());
}
}
