#include <stddef.h>
#include <assert.h>

#include "sysdep.h"
#include "bool.h"
#include "altime.h"

static AlTimeCode cur_time_code = ALTIME_UNKNOWN;
static Bool cur_time_isset = Bool_FALSE;

static const char *time_code_names[] = {
  "unknown",
  "incoming",
  "outgoing"};

/* sets the "time object" to the mode specified.  This is used to alter
   the behavior of various lens modules (e.g. the rule runner) depending
   on when they are being executed */

Bool AlTime_set(time_mode)
     const char *time_mode;
{
  assert (time_mode != NULL);
  switch (*time_mode) {
  case '\0':
  case 'u':
  case 'U':
    cur_time_code = ALTIME_UNKNOWN;
    assert((cur_time_isset = Bool_TRUE, 1));
    break;
  case 'i':
  case 'I':
    cur_time_code = ALTIME_INCOMING;
    assert((cur_time_isset = Bool_TRUE, 1));
    break;
  case 'o':
  case 'O':
    cur_time_code = ALTIME_OUTGOING;
    assert((cur_time_isset = Bool_TRUE, 1));
    break;
  default:
    return Bool_FALSE;
  }
  return Bool_TRUE;		/* Successfully set */
}

AlTimeCode AlTime_get_code(NOARGS)
{
  assert(cur_time_isset == Bool_TRUE);
  return cur_time_code;
}

const char * AlTime_get_name(NOARGS)
{
  assert(cur_time_isset == Bool_TRUE);
  return time_code_names[cur_time_code];
}

const char * AlTime_get_name_from_code(code)
     AlTimeCode code;
{
  return time_code_names[code];
}
