#include <iostream>
#include <string>
#include <vector>
#include "clase.hpp"
using namespace std;
 
//programa que crea un registro de personas con
//sus respectivos pasatiempos
 
//prototipo de funciones
void func_crea_objeto(string fulano);
void func_borra_objeto(string mengano);
void func_lista_objetos();
void func_lista_pasatiempos(string sutano);
void func_lista_personas(string pasatiempo);
 
//declaro el vector donde guardare cada objeto de la clase
vector<Persona> objetos;
 
//programa principal
int main()
{
    cout<<"programa registro de pasatiempos\n"<<endl
        <<"escoja una de las siguientes opciones"<<endl
        <<"o teclee 0 para salir:\n"<<endl
        <<"teclee 1 para agragar un nombre y sus pasatiempos"<<endl
        <<"teclee 2 para borrar un nombre y sus pasatiempos"<<endl
        <<"teclee 3 para listar todos los nombres"<<endl
        <<"teclee 4 para listar los pasatiempos de alguien en particular"<<endl
        <<"teclee 5 para listar las personas con un pasatiempo en particular\n"<<endl;
 
    cout<<"Ingrese su eleccion (0 para salir): ";
    int x;
    cin>>x;
    while ((x != 0)&&((x==1)||(x==2)||(x==3)||(x==4)||(x==5)))//necesario para que el bucle no quede enciclado
    {                                                         //si le introduce otro valor a x
        if((x==1)||(x==2)||(x==3)||(x==4)||(x==5))
        {
            if(x == 1)
            {
                cout<<"\nIngrese el nombre de la persona: ";
                string fulano;
                cin>>fulano;
                func_crea_objeto(fulano);//llamo a la funcion
                cout<<"\ningrese otra opcion (0 para salir): ";
                cin>>x;
            }
 
            if(x == 2)
            {
                cout<<"\nIngrese el nombre de la persona que quiere eliminar: ";
                string mengano;
                cin>>mengano;
                func_borra_objeto(mengano);//llamo a la funcion
                cout<<"\ningrese otra opcion (0 para salir): ";
                cin>>x;    
            }
 
            if(x == 3)
            {
                func_lista_objetos();//llamo a la funcion
                cout<<"\ningrese otra opcion (0 para salir): ";
                cin>>x;    
            }
 
            if(x == 4)
            {
                cout<<"\nTeclee el nombre de quien desea saber los pasatiempos: ";
                string sutano;
                cin>>sutano;
                func_lista_pasatiempos(sutano);//llamo a la funcion
                cout<<"\ningrese otra opcion (0 para salir): ";
                cin>>x;    
            }
 
            if(x == 5)
            {
                cout<<"\nTeclee el pasatiempo: ";
                string pasatiempo;
                cin>>pasatiempo;
                func_lista_personas(pasatiempo);//llamo a la funcion
                cout<<"\ningrese otra opcion (0 para salir): ";
                cin>>x;
            }
        }
        else
        {
            cout<<"esa opcion no es valida"<<endl
                <<"escoja una de las opciones (0 para salir): ";
            cin>>x;
        }
    }
 
return 0;
}
 
/*************************DECLARO FUNCIONES***************************/
 
void func_crea_objeto(string fulano)
{
    //creando un objeto de la clase Persona
    Persona persona;
    
    //asignando valores a las variables miembro de la clase
    persona.Setnombre(fulano);
    cout<<"Introduzca los pasatiempos ('0' para salir) de " <<fulano<<":"<<endl;
    cout<<"Pasatiempo #1: ";
    string pas;
    cin>>pas;
    int a = 2;
    while(pas != "0")
    {
        persona.Setpasatiempos(pas);
        cout<<"Pasatiempo #"<<a<<": ";
        cin>>pas;
        a = a + 1;
    }
    objetos.push_back(persona);//introsuzco el objeto en un vector
}
 
void func_borra_objeto(string mengano)
{
    int prueba = 0;
    for(unsigned i = 0; i < objetos.size(); i++)
    {
        if((objetos[i].devuelve_nombre()) == mengano)
        {
            objetos.erase(objetos.begin() + i);//borro el objeto solicitado
            cout<<"\nLos datos de "<<mengano<<" han sido eliminados"<<endl;
            prueba = 1;
        }
    }
    if(prueba == 0)
        cout<<"Ese nombre no esta en el registro"<<endl;
}
 
void func_lista_objetos()
{
    cout<<"\nTenemos a:"<<endl;
    for(unsigned i = 0; i < objetos.size(); i++)
    {
        cout<<objetos[i].devuelve_nombre()<<" con "//obtengo el nombre de la persona
            <<(objetos[i].devuelve_vector()).size()<<" pasatiempo(s)"<<endl;//obtengo la cantidad de pasatiempos
    }
}
 
void func_lista_pasatiempos(string sutano)
{
    for(unsigned i = 0; i < objetos.size(); i++)
    {
        if((objetos[i].devuelve_nombre()) == sutano)
        {
            if((objetos[i].devuelve_vector()).size() == 0)//en caso de que la persona no tenga pasatiempos
                cout<<sutano<<" no tiene pasatiempos"<<endl;
            
            else    
            {
                for(unsigned j = 0; j < (objetos[i].devuelve_vector()).size(); j++)//recorro el vector de pasatiempos del objeto 'persona'
                {
                    cout<<objetos[i].devuelve_vector()[j]<<endl;
                }
            }
        }
    }
}
 
void func_lista_personas(string pasatiempo)
{
    int prueba = 0;
    for(unsigned i = 0; i < objetos.size(); i++)
    {
        for(unsigned j = 0; j < (objetos[i].devuelve_vector()).size(); j++)
        {
            if(objetos[i].devuelve_vector()[j] == pasatiempo)
            {
                cout<<objetos[i].devuelve_nombre()<<endl;
                prueba = 1;
            }
        }
    }
    if(prueba == 0) cout<<"Nadie practica esa actividad"<<endl;
}