/*
	Fernando Méndez
	https://fernmend.ddns.net
	C++ | Clases y memoria dinámica.
*/


#include "ListaPersonas.h"
using namespace std;


ListaPersonas::ListaPersonas(){
	_capacidad = 2;
	_contador = 0;
	_persona = new Persona * [_capacidad]; //Crea una lista de punteros (que en un futuro, apuntarán cada uno a una Persona(clase)).
}

ListaPersonas::ListaPersonas(int capacidad){
	_capacidad = capacidad;
	_contador = 0;
	_persona = new Persona * [_capacidad]; //Crea una lista de punteros (que en un futuro, apuntarán cada uno a una Persona(clase)).
}

void ListaPersonas::ampliar() {
	_capacidad *= 2;
	Persona** aux = new Persona * [_capacidad];

	for (int i = 0; i < _contador; i++) {
		aux[i] = _persona[i];
	}

	delete[] _persona;
	_persona = aux;
}

void ListaPersonas::liberar() {
	for (int i = 0; i < _contador; i++) {
		delete _persona[i];
	}

	delete[] _persona;
}

void ListaPersonas::agregar() {
	string nombre, apellidos, NIF, edad;

	do {
		if (_contador == _capacidad) { ampliar(); }
		cout << "Introduzca nombre de persona: " << endl;
		getline(cin, nombre);
		cout << "Introduzca apellidos: " << endl;
		getline(cin, apellidos);
		cout << "Introduzca NIF: " << endl;
		getline(cin, NIF);
		cout << "Introduzca edad: " << endl;
		getline(cin, edad);
		_persona[_contador] = new Persona(nombre, apellidos, NIF, edad);
		_contador++;
		cout << "Pulse 'ESC' para SALIR, 'ENTER' para continuar..." << endl;
	} while (!salir());
}

void ListaPersonas::mostrar() {
	cout << setw(10) << right << "NOMBRE" << setw(20) << "APELLIDOS" << setw(20) << "NIF" << setw(15) << "EDAD" << endl;
	cout << setw(75) << setfill('=') << "\n" << setfill(char(0));
	for (int i = 0; i < _contador; i++) {
		_persona[i]->mostrar();
		cout << endl;
	}
}

bool ListaPersonas::salir() {
	int tecla = 27;
	bool ESC = false;

	cin.sync();
	tecla = _getch();
	if (tecla != 0xe0) {
		if (tecla == 27) {
			ESC = true;
		}
	}

	return ESC;
}