#!/usr/bin/env python3
import sys
import json
import argparse
import time

class Colors:
	GREEN = '\033[92m'
	YELLOW = '\033[93m'
	RED = '\033[91m'
	BOLD = '\033[1m'
	END = '\033[0m'

def create_dict(size=10):
	# Создаем словарь с элементами 1 МБ каждый
	data_dict = {}
	# 10 элементов по 1 МБ = 10 МБ
	for i in range(size):
		# Каждый элемент 1 МБ данных (1024 * 1024)
		data_dict[i] = b'A' * 1_048_576
	return data_dict

def cpu_memory_load(data_dict, count=1500000):
	"""Нагрузка CPU с большими данными в памяти"""
	total = 0
	
	# 1000 итераций
	for _ in range(count):
		# 10 инкрементов
		for _ in range(10):
			total += 1
		
		# Чтение ~1 МБ из памяти
		key = total % len(data_dict)
		data_chunk = data_dict[key]
		total += len(data_chunk) % 1000  # Используем размер данных
	
	return 0

def get_color(time, limit=2):
	"""Получение цвета для температуры"""
	if time <= limit:
		return Colors.GREEN
	elif time < limit*2:
		return Colors.YELLOW
	else:
		return Colors.RED + Colors.BOLD

def main():
	parser = argparse.ArgumentParser()
	parser.add_argument('--json', action='store_true', help='Вывод в формате JSON')
	parser.add_argument('--nocolor', action='store_true', help='Вывод без цветовых акцентов')
	args = parser.parse_args()

	ref = 1.3
	title = f"Время выполнения цикла (не более {ref} sec)"
	data_dict = create_dict()
	time_start = time.time()
	cpu_memory_load(data_dict, 1500000)
	time_elapsed = time.time() - time_start
	
	if time_elapsed is None:
		print("Ошибка: Не удалось получить время выполнения цикла для проверки CPU")
		sys.exit(1)

	if args.json:
		result = [{
			"title": title,
			"value": time_elapsed,
			"reference": ref,
			"format": "{x:.2f} sec",
			"condition": "less"
		}]
		print(json.dumps(result, ensure_ascii=False))
	else:
		if args.nocolor:
			print(f"{title}: {time_elapsed:.2f}")
		else:
			print(f"{title}: {get_color(time_elapsed, ref)}{time_elapsed:.2f}{Colors.END}")

if __name__ == "__main__":
	main()