#include "lista_n_ord.h"

int imprime_op()
{
	int op;

	do
	{
		printf("---------------- Qual a operacao? -----------------\n");
		printf(" [1] - Inserir um elemento à lista\n");
		printf(" [2] - Remover um elemento da lista\n");
		printf(" [3] - Remover todas as ocorrencias do elemento na lista\n");
		printf(" [4] - Inserir elemento no inicio da lista\n");
		printf(" [5] - Remover os elementos impares\n");
		printf(" [6] - Mostrar o menor elemento da lista\n");
		printf(" [7] - Quantidade de elementos da lista\n");
		printf(" [8] - Concatenar duas listas\n");
		printf(" [9] - Imprimir lista atual\n");
		printf("[10] - Sair do programa\n");
		printf("Operacao: "); setbuf(stdin,NULL);
		scanf("%d", &op);
	} while(op < 0 || op > 11);

	return op;
}

int imprime_op2()
{
	int op;

	do
	{
		printf("---------------- Qual a operacao p/ 2da lista? -----------------\n");
		printf("(1) - Inserir um elemento à uma segunda lista\n");
		printf("(2) - Remover um elemento da segunda lista\n");
		printf("(3) - Imprimir a segunda lista\n");
		printf("(4) - Concatenar as duas listas\n");
		printf("(5) - Sair do programa da segunda lista\n");
		printf("Operacao: "); setbuf(stdin,NULL);
		scanf("%d", &op);
	} while(op < 0 || op > 11);
}

int main(void)
{
	int elemento, op = -1, op2, op_lista = 0;
	Lista L1 = cria_lista();
	Lista L2 = cria_lista();

	system("clear");
	while(op != 10)
	{
		op = imprime_op();
		switch(op)
		{
			case 1:
				printf("Elemento a ser inserido: ");
				scanf("%d", &elemento);
				if(insere_elem(L1, elemento))
					printf("Elemento inserido!\n");
				else
					printf("Elemento nao inserido!\n");
				getchar();
				break;
			case 2:
				printf("Qual elemento sera removido? ");
				scanf("%d", &elemento);
				if(remove_elem(L1, elemento))
					printf("Elemento removido\n");
				else
					printf("Elemento nao removido\n");
				getchar();
				break;
			case 3:
				printf("Qual elemento sera removido em todas as ocorrencias? ");
				scanf("%d", &elemento);
				if(remove_todos(L1, elemento))
					printf("Elementos removidos!\n");
				else
					printf("Os elementos não foram removidos\n");
				break;
			case 4:
				printf("Qual elemento seria inserido no inicio da lista? ");
				scanf("%d", &elemento);
				if(insere_inicio(L1, elemento))
					printf("Elemento inserido no inicio!\n");
				else
					printf("Elemento nao foi inserido no inicio!\n");
				break;
			case 5:
				printf("Eliminando os elementos impares...\n");
				if(remover_impares(L1))
					printf("Imprima a lista para ver o resultado.\n");
				else
					printf("Erro!\n");
				break;
			case 6:
				printf("Capturando o menor elemento da lista...\n");
				menor_elem(L1);
				break;
			case 7:
				tamanho_lista(L1);
				break;
			case 8:
				printf("Não existe uma segunda lista para concatenar...\n");
				while((op2 = imprime_op2()) != 5)
				{
					switch(op2)
					{
						case 1:
							printf("Inserir em qual lista? ");
							scanf("%d", &op_lista);
							if(op_lista == 1)
							{
								printf("Elemento a ser inserido: ");
								scanf("%d", &elemento);
								if(insere_elem(L1, elemento))
									printf("Elemento inserido na lista 1\n");
								else
									printf("Elemento nao inserido!\n");
							}
							else if(op_lista == 2)
							{
								printf("Elemento a ser inserido: ");
								scanf("%d", &elemento);
								if(insere_elem(L2, elemento))
									printf("Elemento inserido na lista 2\n");
								else
									printf("Elemento nao inserido!\n");
							}
							else
								break;
							getchar();
							break;
						case 2:
							printf("Remover de qual lista? ");
							scanf("%d", &op_lista);
							if(op_lista == 1)
							{
								printf("Elemento a ser removido: ");
								scanf("%d", &elemento);
								if(remove_elem(L1, elemento))
									printf("Elemento removido da lista 1\n");
								else
									printf("Elemento nao removido!\n");
							}
							else if(op_lista == 2)
							{
								printf("Elemento a ser inserido: ");
								scanf("%d", &elemento);
								if(remove_elem(L2, elemento))
									printf("Elemento removido na lista 2\n");
								else
									printf("Elemento nao removido!\n");
							}
							else
								break;
							getchar();
							break;
						case 3:
							printf("Imprimir qual lista? ");
							scanf("%d", &op_lista);

							if(op_lista == 1)
								imprime_lista(L1);

							else if(op_lista == 2)
								imprime_lista(L2);
							else
								break;
							getchar();
							break;
						case 4:
							printf("Lista 3: "); imprime_lista(concatenar_lista(L1,L2));
							break;
					}
					setbuf(stdin,NULL);
					getchar();
					system("clear");
				}
				//else concatenar_lista(L1,L2);
				break;
			case 9:
				system("clear");
				imprime_lista(L1);
				break;
		}
		setbuf(stdin,NULL);
		if(op == 10)
			return 0;
		getchar();
		system("clear");
	}
	free(L1);
	free(L2);
	return 0;
}

