def get_filename(message):
    forbidden='*|\\:"<>?/'
    while True:
        line=input(message)
        for i in forbidden:
            if i in line:
                print('Symbols {} are forbidden to use'.format(forbidden))
                break
        else:
            break
    if not line.endswith('.lst'): line+='.lst'
    return line

def get_int(message,i_c):
    error_line='Only numbers {} are allowed'.format(range(i_c))
    while True:
        try:
            i=int(input(message))
            if i in range(i_c+1):
                return i
            else:
                print(error_line)
        except ValueError:
            print(error_line)

def options(changed,empty):
    line='[A]dd '+('[S]ave ' if changed else '')+('[D]elete ' if not empty else '')+'[Q]uit [a]: '
    answers='Aa'+('Ss' if changed else '')+('Dd' if not empty else '')+'Qq'
    while True:
        answer=input(line)
        if answer:
            if answer in answers:
                return answer.lower()
            else:
                print('-Invalid choice. Print one of: \'{}\'-'.format(answers))
        else:
            return 'a'
def options_quit():
    line='Unsaved changes were made. Do you want to save them?\n[Y]es [N]o [C]ancel: '
    answers='YyNnCc'
    while True:
        answer=input(line)
        if answer in answers and answer:
            return answer.lower()
        else:
            print('Answer only {}'.format(answers))

def save_list(filename,items):
    file=open('data\\'+filename,'w')
    for i in items:
        file.write(i+'\n')

def print_list(lst):
    for i,j in enumerate(lst,start=1):
        print('{}: {}'.format(i,j))

def add(items):
    items.append(input('Add item: '))
    items.sort(key=str.lower)

def delete(items):
    item_number=get_int('Number of item to delete or 0 to cancel:',len(items))
    if item_number==0:
        return
    else:
        items.pop(item_number-1)

def main():
    import os
    files=[i for i in os.listdir('data') if i.endswith('.lst')]
    if files:
        print_list(files)
        option=get_int('Print the number of file to load or 0 to create a new one: ',len(files))
    else:
        print('-No .lst files were found-')
        option=0
    if not option:
        filename=get_filename('Print name for a new .lst file: ')
        items=[]
    else:
        filename=files[option-1]
        items=[i.rstrip('\n') for i in open('data\\'+filename,'r')]
    ITEMS,changed=tuple(items),0
    print(filename)
    while True:
        if items:
            print_list(items)
            empty=0
        else:
            print('-list is empty-')
            empty=1
        option=options(changed,empty)
        if option=='a':
            add(items)
            changed=1
        elif option=='d':
            delete(items)
            changed=1
        elif option=='s':
            save_list(filename,items)
            changed=0
            break
        else:
            if changed:
                option=options_quit()
                if option=='y':
                    save_list(filename,items)
                    break
                elif option=='n':
                    break
            else:
                break

main()