# hash_table.py
# Хеш-таблица с цепочками (использует linked_list.py)

import linked_list as ll

def create_hash_table(size=1000):
    """
    Создаёт пустую хеш-таблицу.
    size – количество корзин (рекомендуется простое число).
    """
    return [None] * size

def _hash(name, table_size):
    """Простая хеш-функция на основе суммы кодов символов."""
    return sum(ord(ch) for ch in name) % table_size

def ht_insert(table, name, phone):
    """Вставляет или обновляет запись."""
    idx = _hash(name, len(table))
    # Вставляем в связный список в этой корзине
    table[idx] = ll.ll_insert(table[idx], name, phone)

def ht_find(table, name):
    """Ищет телефон по имени."""
    idx = _hash(name, len(table))
    return ll.ll_find(table[idx], name)

def ht_delete(table, name):
    """Удаляет запись по имени."""
    idx = _hash(name, len(table))
    table[idx] = ll.ll_delete(table[idx], name)

def ht_list_all(table):
    """
    Собирает все записи из всех корзин,
    возвращает отсортированный по имени список.
    """
    records = []
    for bucket in table:
        # Каждая корзина – голова связного списка
        current = bucket
        while current is not None:
            records.append((current['name'], current['phone']))
            current = current['next']
    records.sort(key=lambda x: x[0])
    return record