// test.cpp - lista de teléfonos
#include <iostream>
#include <string>
#include <vector>
#include "persona.h"
#include "listatfnos.h"
using namespace std;

int menu()
{
  cout << "\n\n";
  cout << "1. Buscar\n";
  cout << "2. Buscar siguiente\n";
  cout << "3. Añadir\n";
  cout << "4. Eliminar\n";
  cout << "5. Salir\n";
  cout << endl;
  cout << "   Opción: ";
  int op;
  do
    cin >> op;
  while (op < 1 || op > 5);
  cin.ignore();
  return op;
}

void buscar(CListaTfnos& listatfnos, bool buscar_siguiente)
{
  static int pos = -1;
  static string cadenabuscar;
  
  if (!buscar_siguiente)
  {
    cout << "conjunto de caracteres a buscar: ";
    getline(cin, cadenabuscar);
    // Buscar a partir del principio
    pos = listatfnos.buscar(cadenabuscar, 0);
  }
  else
    // Buscar el siguiente a partir del último encontrado
    pos = listatfnos.buscar(cadenabuscar, pos+1);
  try
  {
    cout << listatfnos.registro(pos).obtenerNombre() << endl;
    cout << listatfnos.registro(pos).obtenerDireccion() << endl;
    cout << listatfnos.registro(pos).obtenerTelefono() << endl;
  }
  catch(const char *msj)
  {
    if (listatfnos.longitud() != 0)
      cout << "búsqueda fallida o " << msj << endl;
    else
      cout << "lista vacía\n";
  }
}

void anyadir(CListaTfnos& listatfnos)
{
  string nombre, direccion;
  long telefono;

  cout << "nombre:    "; getline(cin, nombre);
  cout << "dirección: "; getline(cin, direccion);
  cout << "teléfono:  "; cin >> telefono;
  listatfnos.anyadir(CPersona(nombre, direccion, telefono));
}

void eliminar(CListaTfnos& listatfnos)
{
  long telefono;
  bool eliminado = false;

  cout << "teléfono: "; cin >> telefono;
  eliminado = listatfnos.eliminar(telefono);
  if (eliminado)
    cout << "registro eliminado\n";
  else
    if (listatfnos.longitud() != 0)
      cout << "teléfono no encontrado\n";
    else
      cout << "lista vacía\n";
}

int main()
{
  // Crear un objeto lista de teléfonos
  CListaTfnos listatfnos;
  int opcion = 0;

  do
  {
    opcion = menu();
    switch (opcion)
    {
      case 1: // buscar
        buscar(listatfnos, false);
        break;
      case 2: // buscar siguiente
        buscar(listatfnos, true);
        break;
      case 3: // añadir
        anyadir(listatfnos);
        break;
      case 4: // eliminar
        eliminar(listatfnos);
        break;
    }
  }
  while(opcion != 5);
}

