#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import os
import shutil
import requests
from pathlib import Path

# ===================== CONFIGURACIÓN =====================
# Ruta a la unidad de disco a monitorizar
DISK_PATH = "/mnt/hdd"                   # <-- Cambia a tu ruta

# Carpeta donde buscar y borrar las carpetas más antiguas
TARGET_DIR = "/mnt/hdd"             # <-- Cambia a la carpeta donde borrar

# Umbral de espacio libre en bytes (10GB)
THRESHOLD_BYTES = 10 * 1024**3

# Datos de Telegram
TELEGRAM_BOT_TOKEN = "7944442208:AAH_GVglsx4pVdnzBY7hJA18kw9oBrYe56I"     # Bot token de BotFather
TELEGRAM_CHAT_ID = "-1002928379169"            # @nombre_del_canal o ID del chat
# ==========================================================


def get_free_space(path: str) -> int:
    """Devuelve espacio libre en bytes en el disco."""
    stat = shutil.disk_usage(path)
    return stat.free


def send_telegram_message(text: str):
    """Envía mensaje de texto al canal de Telegram."""
    url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage"
    payload = {
        "chat_id": TELEGRAM_CHAT_ID,
        "text": text,
        "parse_mode": "HTML"
    }
    try:
        resp = requests.post(url, data=payload, timeout=10)
        resp.raise_for_status()
    except Exception as e:
        print(f"[ERROR] No se pudo enviar mensaje a Telegram: {e}")


def delete_oldest_folders(folder_path: str, n: int = 5) -> list:
    """
    Elimina las n carpetas más antiguas dentro de folder_path.
    Devuelve la lista de carpetas eliminadas.
    """
    path = Path(folder_path)
    if not path.exists() or not path.is_dir():
        return []

    # Listar solo carpetas
    dirs = [d for d in path.iterdir() if d.is_dir()]

    # Ordenar por fecha de modificación (más antiguas primero)
    dirs.sort(key=lambda d: d.stat().st_mtime)

    # Seleccionar las n más antiguas
    oldest = dirs[:n]

    deleted = []
    for d in oldest:
        try:
            shutil.rmtree(d)
            deleted.append(d.name)
        except Exception as e:
            print(f"[ERROR] No se pudo eliminar {d}: {e}")
    return deleted


def main():
    free_space = get_free_space(DISK_PATH)
    free_gb = round(free_space / 1024**3, 2)

    if free_space < THRESHOLD_BYTES:
        deleted_folders = delete_oldest_folders(TARGET_DIR, 5)
        msg = (
            f"⚠️ <b>Espacio bajo</b>\n"
            f"Espacio libre: {free_gb} GB\n"
            f"Se eliminaron {len(deleted_folders)} carpetas:\n" +
            "\n".join(deleted_folders)
        )
    else:
        msg = f"✅ Espacio libre: {free_gb} GB. No se eliminó nada."

    print(msg)
    send_telegram_message(msg)


if __name__ == "__main__":
    main()