# Задание
# мне нужно отыскать файл среди десятков других
# я знаю некоторые части этого файла (на память или из другого источника)
# я ищу только среди .sql файлов
# 1. программа ожидает строку, которую будет искать (input())
# после того, как строка введена, программа ищет её во всех файлах
# выводит список найденных файлов построчно
# выводит количество найденных файлов
# 2. снова ожидает ввод
# поиск происходит только среди найденных на этапе 1
# 3. снова ожидает ввод
# ...
# Выход из программы программировать не нужно.
# Достаточно принудительно остановить, для этого можете нажать Ctrl + C

# Пример на настоящих данных

# python3 find_procedure.py
# Введите строку: INSERT
# ... большой список файлов ...
# Всего: 301
# Введите строку: APPLICATION_SETUP
# ... большой список файлов ...
# Всего: 26
# Введите строку: A400M
# ... большой список файлов ...
# Всего: 17
# Введите строку: 0.0
# Migrations/000_PSE_Application_setup.sql
# Migrations/100_1-32_PSE_Application_setup.sql
# Всего: 2
# Введите строку: 2.0
# Migrations/000_PSE_Application_setup.sql
# Всего: 1

# не забываем организовывать собственный код в функции


from os import listdir, path


migrations = 'Migrations'
current_dir = path.dirname(path.abspath(__file__))


def files_found(dir_list, string):
    sql_list = [filename for filename in dir_list if filename.endswith('.sql')]
    print(sql_list)

    filenames = []
    for filename in sql_list:
        filename_open = path.join(migrations, filename)
        with open(filename_open) as file:
            if string.lower() in file.read().lower():
                filenames.append(filename)

    return filenames


if __name__ == '__main__':

    migrations_path = path.join(current_dir, migrations)
    dir_list = listdir(migrations_path)
    while True:
        string = input('Введите запрос: ')

        res = files_found(dir_list, string)

        for file in res:
            print(path.join(migrations, file))

        dir_list = [file.replace('Migrations//', '') for file in res]

        print('Всего файлов: %d' % len(dir_list))
