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

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

def get_core_count():
    """Получение количества ядер CPU"""
    try:
        # Пробуем из файла
        with open('/proc/cpuinfo', 'r') as f:
            cores = sum(1 for line in f if line.startswith('processor'))
        return cores
    except:
        try:
            # Альтернативный способ через os.cpu_count()
            return os.cpu_count()
        except:
            print("Ошибка: Не удалось открыть файл /proc/cpuinfo")
            print("Ошибка: Не удалось получить количество ядер CPU")
            sys.exit(1)
            

def get_color(cores, limit=8):
    """Получение цвета для кол-ва vcpu"""
    if cores > limit:
        return Colors.GREEN
    elif cores <= limit:
        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 = 4
	title = f"Количество ядер (не менее {ref})"	
	cores = get_core_count()

	if cores is None:
		print("Ошибка: Не удалось получить количество ядер CPU")
		sys.exit(1)

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

if __name__ == "__main__":
	main()