import os
import random
import shutil

# Задаются пути к папкам и файлам
source_directory = "/var/data"
destination_directory = "/var/result"
destination_file = os.path.join(destination_directory, "data.txt")

# Создание случайных файлов для работы системы, так как заранее файлы нерационально создавать
def generate_random_files(directory):
    # Создание необходимых папок, если они не существуют, если существуют, то пропускаем
    os.makedirs(directory, exist_ok=True)

    # Будет от 5 до 10 файлов
    num_files = random.randint(5, 10)

    for i in range(1, num_files + 1):
        file_name = f"file_{i}.txt"
        file_path = os.path.join(directory, file_name)
        
        # Будет от 1 до 100 чисел со значением от 1 до 100
        num_numbers = random.randint(1, 100)
        numbers = [str(random.randint(1, 100)) for _ in range(num_numbers)]
        
        # Числа сохраняются в файл каждое на новой строке
        with open(file_path, 'w') as f:
            f.write("\n".join(numbers))

    print(f"Создано {num_files} файлов в директории {directory}.")

# Находится файл с самым большим количеством строк и копируется в папку назначения
def find_and_copy_longest_file(source_dir, destination_file):
    if not os.path.exists(source_dir) or not os.path.isdir(source_dir):
        return print ("Папки с данными не существует. Завершение выполнения")

    longest_file = None
    longest_lines = 0

    for filename in os.listdir(source_dir):
        filepath = os.path.join(source_dir, filename)

        with open(filepath, mode="r") as file:
            length = len(file.readlines())

            if length > longest_lines:
                longest_file = filepath
                longest_lines = length

    if longest_file is None: 
        return print("Папка с данными пуста. Завершение выполнения")
    
    shutil.copy(longest_file, destination_file)
    print(f"Файл \"{longest_file}\" с количеством строк {longest_lines} скопирован в {destination_file}")


if __name__ == "__main__":
    generate_random_files(source_directory)
    find_and_copy_longest_file(source_directory, destination_file)