import argparse

# Создаём парсер и добавляем аргументы
parser = argparse.ArgumentParser(description='Вывод N самых длинных контигов из velvet contigs.fa с их длиной и покрытием')
parser.add_argument('fasta', help='Путь к файлу contigs.fa')
parser.add_argument('n', type=int, help='Количество самых длинных контигов для вывода')
args = parser.parse_args()

# Список для хранения (длина, покрытие, заголовок)
contigs = []

# Чтение файла и извлечение данных из заголовков
with open(args.fasta, 'r') as f:
    for line in f:
        if line.startswith('>'):
            # Разбиваем заголовок по подчёркиваниям
            parts = line.strip().split('_')
            length = 0
            coverage = 0.0
            
            # Ищем length_ и cov_
            for i, part in enumerate(parts):
                if part == 'length' and i+1 < len(parts):
                    try:
                        length = int(parts[i+1])
                    except ValueError:
                        pass
                if part == 'cov' and i+1 < len(parts):
                    try:
                        coverage = float(parts[i+1])
                    except ValueError:
                        pass
            
            if length > 0:  # Добавляем только если длина найдена
                contigs.append((length, coverage, line.strip()))

# Сортировка по убыванию длины
contigs.sort(reverse=True)

# Вывод N самых длинных
print(f'Top-{args.n} longest contigs:')
for i in range(min(args.n, len(contigs))):
    length, coverage, header = contigs[i]
    print(f'{header}')
    print(f'   Length: {length}; Coverage: {coverage}')
