import rrdtool
import time
import requests
from dotenv import load_dotenv
import os
load_dotenv()

def send_telegram():
    token = os.getenv("TELEGRAM_TOKEN")
    channel_id = os.getenv("TELEGRAM_CHANNEL_ID")
    if not token or not channel_id:
        raise ValueError("Telegram токен или ID канала не заданы в .env")

    url = f"https://api.telegram.org/bot{token}/sendPhoto"
    with open('temperature_graph.png', 'rb') as file:
        r = requests.post(url, data={
            "chat_id": channel_id
        }, files={
            "photo": file
        })
    print(r.text)
    if r.status_code != 200:
        raise Exception(f"Ошибка отправки в Telegram: {r.text}")

def create_graph(rrd_file: str, output_file: str):
    # Получаем текущее время
    now = int(time.time())
    # Время начала (24 часа назад)
    start_time = now - 86400  # 86400 секунд = 1 день

    # Форматируем даты для заголовка
    start_date = time.strftime("%d-%m-%Y", time.localtime(start_time))
    end_date = time.strftime("%d-%m-%Y", time.localtime(now))

    try:
        rrdtool.graph(
            output_file,
            "--start", str(start_time),  # Начало графика
            "--end", str(now),  # Конец графика
            "--vertical-label", "Temperature (°C)",
            "--title", f"Temperature Readings from {start_date} to {end_date}",
            "DEF:low_temp={}:temp_low:AVERAGE".format(rrd_file),  # Средние значения нижней температуры
            "DEF:high_temp={}:temp_high:AVERAGE".format(rrd_file),  # Средние значения верхней температуры
            "LINE1:low_temp#0000FF:Low Temperature",  # Линия для нижней температуры (синий)
            "LINE1:high_temp#FF0000:High Temperature",  # Линия для верхней температуры (красный)
            r"GPRINT:low_temp:MIN:Min Low Temp\: %2.2lf°C",
            r"GPRINT:low_temp:MAX:Max Low Temp\: %2.2lf°C",
            r"GPRINT:low_temp:AVERAGE:Avg Low Temp\: %2.2lf°C\n",
            r"GPRINT:high_temp:MIN:Min High Temp\: %2.2lf°C",
            r"GPRINT:high_temp:MAX:Max High Temp\: %2.2lf°C",
            r"GPRINT:high_temp:AVERAGE:Avg High Temp\: %2.2lf°C\n",
        )
        print(f"График успешно создан: {output_file}")
        send_telegram()

    except Exception as e:
        print(f"Ошибка создания графика: {e}")

# Пример использования
rrd_file = "temperature_data.rrd"
output_file = "temperature_graph.png"
create_graph(rrd_file, output_file)
