#!/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_memory_gb():
    """Получение объема памяти в ГБ"""
    try:
        with open('/proc/meminfo', 'r') as f:
            for line in f:
                if line.startswith('MemTotal:'):
                    kb = int(line.split()[1])
                    return round(kb / 1024 / 1024, 1)  # KB → MB → GB
    except:
        return None
    return None

def get_color(ram_size, limit=8):
    """Получение цвета для размера ОЗУ"""
    if ram_size > limit:
        return Colors.GREEN
    elif ram_size == 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 = 8
	title = f"Объем памяти на сервере (не менеее {ref})"	
	ram_size = get_memory_gb()
	
	if ram_size is None:
		if args.json:
			print(json.dumps({"error": "Не удалось получить объем памяти ОЗУ"}, ensure_ascii=False))
		else:
			print("Ошибка: Не удалось получить объем памяти ОЗУ")
		sys.exit(1)

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

if __name__ == "__main__":
	main()