#include <stdio.h>
#include <stdlib.h>
#include "h.h"
#include <string.h>

void readFromKeyboard(Element_t *item)
{
    if (!item)
    {
        fprintf(stderr, "Nullpointer");
    }
    else
    {
        printf("Songtitle:\n");
        fgets(item->songtitle,255,stdin);
        *strrchr(item->songtitle, '\n')=0;
        printf("Interpreter:\n");
        fgets(item->interpreter,255,stdin);
        *strrchr(item->interpreter, '\n')=0;
    }
}
Element_t *allocateElement()
{
    Element_t *elem = malloc(sizeof(Element_t));
    if (elem == 0)
    {
        fprintf(stderr, "Error:␣no␣memory␣available!\n");
        return 0;
    }
    readFromKeyboard(elem);
    elem->next = 0;
    return elem;
}

Element_t *find_end(Element_t *list)
{
    while (list->next != 0)
        list = list->next;
    return list;
}

Element_t *insertLast(Element_t *list)
{
    Element_t *elem = allocateElement();
    if (list != 0)

    {
        Element_t *end = find_end(list);

        end->next = elem;

    }
    else
        list = elem;
    return list;
}
void freeList(Element_t **list)
{
    Element_t *list2=*list;
    Element_t *next;
    while (list2 != 0)
    {
        next = list2->next;
        free(list2);
        list2 = next;
    }
    *list=0;
}
void print_singleElement(Element_t *element)
{
    printf("Ausgabe:");
    printf("%s, %s\n", element->songtitle, element->interpreter);
}
void print_entireList(Element_t *list)
{
    printf("Ausgabe alle:");
    long i=1;
    while (list)
    {
        printf("%ld: %s, %s\n", i, list->songtitle, list->interpreter);
        list = list->next;
        i++;

    }
    printf("\n");

}
void print_list_reverse(Element_t *list)
{
if (list->next)
    print_list_reverse(list->next);
    print_singleElement(list);
}

int main()
{
    Element_t *list=0;
    long Eingabe=1;
    long Element;
    while (Eingabe!=0)
    {
        printf("1.Hinzufügen \n3.Ausgabe \n4.Ausgabe Element\n\n");
        printf("Auswahl:");
        scanf("%ld", &Eingabe);
        getchar();

        switch(Eingabe)
        {
        case 1:
            list=insertLast(list);
            break;

        case 3:
            print_entireList(list);
            break;
        case 4:
        {
            printf("Welches Element?\n");
            scanf("%ld", &Element);
            getchar();
            long i;
            for (i=0; i<Element-1; i++)
            {
                list = list->next;
            }
            print_singleElement(list);

        }
        case 5:
        {
            printf("Umgekehrt:");
            print_list_reverse(list);
            break;
            }
        }

    }
    printf("Hello world!\n");
    return 0;
}
