/* Do not remove the headers from this file! see /USAGE for more info. */

#include <mudlib.h>

inherit OBJ;
inherit M_GETTABLE;

#define INACTIVE  0
#define RECORDING 1

private nosave int state;
private nosave int at_beginning = 1;
private nosave string transcript = "";

void setup() {
  set_adj( "fast forward", "rewind", "stop", "play", "record");
  set_id("recorder", "player", "button", "buttons", "rewind", "fast forward", "stop", "play", "record");
  set_long("It seems to be a tape recorder, and has the standard pannel of buttons.\nHowever, there seems to be no place to put a tape.");
}

string get_item_desc(string str)
{
  switch(str)
    {
    case "button":
      return "Which button do you mean?";
    case "record":
    case "record button":
      return sprintf("It's red and says, 'record'.%s",state == RECORDING ?
		     "  It's currently pressed down." : "");
    case "play":
    case "play button":
      return "It's a black button that says, 'play'.";
    case "stop":
    case "stop button":
      return "It's a black button that says, 'stop'.";
    case "fast forward":
    case "fast forward button":
      return "It's a black button that says, 'fast forward'.";
    case "rewind":
    case "rewind button":
      return "It's a black button that says, 'rewind'.";
    case "buttons":
      return "The front of the recorder consists of a pannel of buttons.\n"
	"There are buttons labeled: 'record', 'play', 'stop', 'fast forward', 'rewind'.\n";
    }
}

int press(string name)
{
  switch(name){
  case "buttons":
  case "button":
    write("Perhaps you could be a bit more specific than that.\n");
    return 1;
  case "record":
  case "record button":
    if(environment(this_object()) != environment(this_body()))
      {
	write("It won't pick up anything while you're holding it, you know,\n"
	      "except maybe the sound of your skin.\n");
      }
    if(at_beginning)
      transcript = "";
    state = RECORDING;
    this_body()->simple_action("$N $vstart recording on $p recorder.");
    at_beginning = 0;
    return 1;
  case "play":
  case "play button":
    if(!at_beginning)
      {
	write("You'll have to rewind the recorder, first.\n");
	return 1;
      }
    state = INACTIVE;
    this_body()->simple_action("$N $vpush the play button on $p recorder, and a transcript magically appears before $n, in lieu of an actual playback.");
    new(__DIR__ "transcript", transcript)->move(this_body());
    at_beginning = 0;
    return 1;
  case "rewind":
  case "rewind button":
    at_beginning = 1;
    state = 0;
    this_body()->simple_action("$N $vrewind $p recorder.");
    return 1;
  case "fast forward":
  case "fast forward button":
    at_beginning = 0;
    state = 0;
    this_body()->simple_action("$N fast $vforward $p recorder.");
    return 1;
  case "stop":
  case "stop button":
    if(!state)
      {
	write("The recorder is already stopped.\n");
	return 1;
      }
    state = 0;
    this_body()->simple_action("$N $vstop $p recorder.");
    return 1;
  default:
    return 0;
  }
}

void receive_outside_msg(string s)
{
  if(state)
    transcript += s;
}


mapping lpscript_attributes()
{
    return m_gettable::lpscript_attributes() + object::lpscript_attributes();
}
