package main

import (
	"fmt"
)

type Tape struct {
	stimuli   []interface{}
	responses []interface{}
}

func (r *Tape) Record(call interface{}) interface{} {
	r.stimuli = append(r.stimuli, call)

	if len(r.responses) < 1 {
		return fmt.Errorf("Record(%#v) had no response", call)
	}
	resp := r.responses[0]
	r.responses = r.responses[1:]
	return resp
}

func (r *Tape) SetResponses(responses []interface{}) {
	r.responses = responses
}

func (r *Tape) Rewind() {
	r.stimuli = make([]interface{}, 0)
	r.responses = make([]interface{}, 0)
}

func (r *Tape) Play() []interface{} {
	return r.stimuli
}

func NewTape() *Tape {
	tape := new(Tape)
	tape.Rewind()
	return tape
}
