// IODetails.C

#include "prompt.h"
#include "IODetails.h"

istream& GetLine(istream & in, String& s)
{
  // quick and dirty
  const int SIZE = 500;
  char buf[SIZE];
  if (in) {
    in.getline(buf, SIZE);
    s = String(buf);
  } else {
    s = String("");
  }
  return in;
}

istream& operator >> (istream & in, GuestInfo & g)
{
  prompt("Guest name? ");
  GetLine(in, g.name);
  if (in) {
    prompt("address (on one line)? ");
    GetLine(in, g.address);
    prompt("room number? ");
    in >> g.roomNumber;
    in.ignore(100, '\n');
    prompt("charges? ");
    in >> g.charges;
    in.ignore(100, '\n');
  }

  return in;
}

istream& operator >> (istream & in, GuestInfoFixed & g)
{
  prompt("Guest name? ");
  in.getline(g.name, STRSIZE);
  if (in) {
    prompt("address (on one line)? ");
    in.getline(g.address, STRSIZE);
    prompt("room number? ");
    in >> g.roomNumber;
    in.ignore(100, '\n');
    prompt("charges? ");
    in >> g.charges;
    in.ignore(100, '\n');
  }

  return in;
}

ostream& operator << (ostream & out, const GuestInfo & g)
{
  out << g.name << endl;
  out << " "<< g.address << endl;
  out << " " << g.roomNumber << endl;
  out << " " << g.charges << endl;

  return out;
}
