# Распаковка словаря с ключами и значениями
def func_1():
    d1 = {'key1': 1, 'key2': 2}
    d2 = {'key2': 1, 'key3': 2}
    d3 = {'a1': 1, **d2, **d1}
    print(d3)


def concatenate(**kwargs):
    ret = ""
    for x in kwargs.values():
        if (type(x) == list):
            ret += ''.join(str(x))
        else:
            ret += str(x)
    return ret


def create_actor(**kwargs):
    base_dict = {'name': 'Райан', 'surname': 'Рейнольдс', 'age': 47}
    for key, value in kwargs.items():
        base_dict[key] = value
    return base_dict


def info_kwargs(**kwargs):
    for key in sorted(kwargs):
        print(f'{key} = {kwargs[key]}')


def test_args(a, b, *args):
    print(a, b, args)


def print_scores(name, *args):
    print("Student name:", name)
    my_list = list(args)
    my_list.sort()
    for i in my_list:
        print(i)


def truncate_sentences(n, *args):
    print(n)
    for st in args:
        print(st[:n])


def make_strings_big(*args, reverse=False):
    for st in args:
        print(st.lower()) if reverse else print(st.upper())


def item_sum(*args, **kwargs):
    current_sum = 0
    for arg in args:
        current_sum += arg

    for kwarg in kwargs.values():
        current_sum += kwarg
    return current_sum


def calculate_high_low_avg(*args, log_to_console=False):
    average = (max(args) + min(args))/2
    if log_to_console:
        print(f'high={max(args)}, low={min(args)}, avg={average}')
    return average
    

# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

tables = {
    1: {'name': 'Andrey', 'is_vip': True, 'order': {}},
    2: None,
    3: None,
    4: None,
    5: {'name': 'Vasiliy', 'is_vip': False, 'order': {}},
}


def is_table_free(table_number: int):
    return tables[table_number] is None


def get_free_tables():
    return [x[0] for x in tables.items() if x[1] is None]


def reserve_table(table_number: int, name: str, status=False):
    if is_table_free(table_number):
        tables[table_number] = {'name': name, 'is_vip': status, 'order': {}}


def delete_reservation(table_number):
    tables[table_number] = None


def make_order(table, **kwargs):
    menu = ["salad", "soup", "main_dish", "drink", "desert"]
    for key, value in kwargs.items():
        if key in menu:
            if key not in tables[table]['order'].keys():
                tables[table]['order'][key] = value.split(',')
            else:
                tables[table]['order'][key].extend(value.split(','))
            


def delete_order(*, number_table, delete_all=False, **kwargs):
    if delete_all:
        tables[number_table]['order'] = {}
    else:
        for key, value in kwargs.items():
            if value:
                tables[number_table]['order'].pop(key, None)

# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


def main():
    # func_1()

    # print(concatenate(q='iHave', w="next", e="Coins", r=[10, 5, 10, 7]))
    # print(concatenate(q='iHave', w="next", e="Coins"))

    # print(create_actor())
    # print(create_actor(height=190, movies=['Дедпул', 'Главный герой']))

    # info_kwargs(c=43, b=32, a=32)
    # test_args(a=10, 1, 2, 3)

    # print_scores("Jud", 100, 95, 88, 92, 99)

    # my_list =[5, 19, 23, 88]
    # my_dict = {'a': 11, 'b': 23}

    # print(item_sum(*my_list, **my_dict))

    # calculate_high_low_avg(*my_list, log_to_console=True)

    make_order(1, soup='Borsh')
    make_order(1, soup='Лапша')
    
    make_order(1, soup='Borsh,Лапша', desert='Медовик', drink='Cola')

    for key, value in tables.items():
        print(key, value)

    '''    
    try:
        delete_order(number_table=1, delete_all=True)
    except TypeError:
        print('Вызов delete_order без передачи значения по ключу не должен проходить')
    else:
        raise ValueError('Проверьте типы параметров функции delete_order')
    '''
   
    # st = 'absd'
    # lst = st.split(',')
    # print(lst)



if __name__ == '__main__':
    main()