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

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

def get_cpu_temp():
	"""Получение температуры CPU"""
	file_therm = '/sys/class/thermal/thermal_zone0/temp'
	try:
		# Пробуем через файл
		with open(file_therm, 'r') as f:
			return float(f.read().strip()) / 1000
	except:
		try:
			# При отсутствии файла пробуем через lm-sensors
			output = subprocess.check_output(['sensors']).decode()
			match = re.search(r'Core.*?\+(\d+\.\d°)', output)
			if match:
				return float(match.group(1))
			sys.exit(1)
		except:
			print(f"Ошибка: Не удалось открыть файл {file_therm}")
			print("Ошибка: Не удалось получить температуру CPU при помощи lm-sensors")
			sys.exit(1)

def get_color(temp, limit=80):
    """Получение цвета для температуры"""
    half_limit = limit / 2
    if temp < half_limit:
        return Colors.GREEN
    elif temp <= 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 = 80
	title = f"Температура CPU (не более {ref})"	
	temp = get_cpu_temp()
	
	if temp is None:
		print("Ошибка: Не удалось получить температуру CPU")
		sys.exit(1)

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

if __name__ == "__main__":
	main()