import random


name_pool = (
    "Ivan", "Maria", "Peter", "Anna", "Sergey", "Elena", "Alexey", "Olga",
    "Dmitry", "Tatyana", "Mikhail", "Natalia", "Andrey", "Irina", "Nikolay",
    "Svetlana", "Vladimir", "Ekaterina", "Alexander", "Yulia", "Pavel", "Kseniya",
    "Victor", "Anastasia", "Artem", "Victoria", "Maxim", "Polina", "Daniil",
    "Sofia", "Evgeny", "Alice", "Stanislav", "Daria", "Georgy", "Veronika",
    "Kirill", "Margarita", "Timofey", "Arina", "Roman", "Valeria", "Igor",
    "Alina", "Oleg", "Diana", "Yuri", "Milana", "Vasily", "Eva", "Nikita",
    "Leonid", "Stepan", "Bogdan", "Gleb", "Matvey", "Arseny", "Denis",
    "Anton", "Vladislav", "Rodion", "Semyon", "Fedor", "Zahar", "Mark",
    "Lev", "Artyomiy", "Yaroslav", "Timur", "Ruslan", "Boris", "Vadim",
    "Konstantin", "Gennady", "Pavel", "Ilya", "Egor", "Nazar", "Damir",
    "Vsevolod", "Platon", "Savely", "Svyatoslav", "Miron", "Arkady",
    "Yevgeny", "Emil", "Arthur", "Demyan", "Rinat", "Marat", "Farid",
    "Rustam", "Ilshat", "Azamat", "Marcel", "Albert", "Eduard",    "Viktor", "Rostislav", "Gennady", "Yegor", "Petr", "Zakhar",
    "Saveliy", "Gavriil", "Nestor", "Ignat", "Prokhor", "Taras",
    "Severin", "Luka", "Artyomiy", "Radion", "Demyan", "Yefim","Neo", "Max", "Leo", "Sam", "Alex", "John", "Markus",
    "Kevin", "Daniel", "Robert", "James", "Michael", "David",
    "Andrew", "Chris", "Brian", "Steven", "Eric", "Thomas",
    "Ryan", "Justin", "Aaron", "Jason", "Nathan", "Luke"
)


fake_names = [
    "Zero", "Kopek", "Half", "Quarter", "Eighth",
    "Pood", "Copper", "Silver", "Gold", "Ninth"
]


def generate_phone(length: int = 11) -> str:
    start = 10 ** (length - 1)
    end = (10 ** length) - 1
    return str(random.randint(start, end))


def generate_dataset(size: int = 10000, sorted_flag: bool = False) -> list:
    dataset = [
        (random.choice(name_pool), generate_phone())
        for _ in range(size)
    ]

    if sorted_flag:
        dataset.sort(key=lambda x: x[0])

    return dataset


def generate_query_set() -> list:
    return random.sample(name_pool, 100) + fake_names