#include <phantasmal/lpc_names.h>

#include <type.h>

inherit USER_STATE;

private int    init;

private string func_name;
private object obj_to_set;
private int    locale;

static void create(varargs int clone) {
  ::create();
  if(clone) {
    init = 0;
  }
}

void set_up_func(varargs object obj, string desctype, int desc_loc) {
  obj_to_set = obj;
  func_name = desctype;
  locale = desc_loc;
  init = 1;
}

int from_user(string output) {
  error("From_user called in set_obj_desc func!");
}

void pass_data(mixed data) {
  object phr;

  if(typeof(data) == T_NIL) {
    ::pass_data(nil);   /* Request user obj to print prompt */
    pop_state();
    return;
  }

  if(!typeof(data) == T_STRING) {
    error("Incorrect data type in set_obj_desc user state!");
  }

  data = STRINGD->trim_whitespace(data);
  phr = call_other(obj_to_set, "get_" + func_name);

  if(!phr || (func_name == "examine" && phr == obj_to_set->get_look())) {
    phr = PHRASED->new_simple_english_phrase("CHANGE ME!");
    call_other(obj_to_set, "set_" + func_name, phr);
  }
  phr->set_content_by_lang(locale, data);

  send_string("Set " + func_name + " description.\n");

  pop_state();
}
