#!/usr/bin/env python3
import json, urllib.request, urllib.parse, time

token = None
for line in open("/root/site/yandex/.env_hram", encoding="utf-8"):
    if line.startswith("YANDEX2_ACCESS_TOKEN="):
        token = line.split("=", 1)[1].strip()
H = {"Authorization": f"OAuth {token}"}

def list_dir(path):
    url = "https://cloud-api.yandex.net/v1/disk/resources?path=" + urllib.parse.quote(path) + "&limit=100"
    req = urllib.request.Request(url, headers=H)
    with urllib.request.urlopen(req, timeout=60) as r:
        return json.loads(r.read().decode()).get("_embedded", {}).get("items", [])

def move(frm, to):
    url = ("https://cloud-api.yandex.net/v1/disk/resources/move?from=" +
           urllib.parse.quote("disk:" + frm, safe="") + "&path=" + urllib.parse.quote(to))
    req = urllib.request.Request(url, method="POST", headers=H)
    try:
        with urllib.request.urlopen(req, timeout=120) as r:
            return r.status
    except urllib.error.HTTPError as e:
        return e.code, e.read().decode(errors="replace")[:150]

def delete(path):
    url = "https://cloud-api.yandex.net/v1/disk/resources?path=" + urllib.parse.quote(path) + "&permanently=true"
    req = urllib.request.Request(url, method="DELETE", headers=H)
    try:
        with urllib.request.urlopen(req, timeout=120) as r:
            return r.status
    except urllib.error.HTTPError as e:
        return e.code

# показать точные имена в Загрузках
print("=== Загрузки (точные имена):")
items = list_dir("/Загрузки")
for i in items:
    if i["type"] == "file":
        print(f"  {i['name']!r}")

targets = {
    "меню": "/Личное/Здоровье",
    "гайд": "/Личное/Здоровье",
    "прошёл": "/Храм Рождества/Духовные книги",
    "день прошел": "/Храм Рождества/Духовные книги",
}
for i in items:
    if i["type"] != "file":
        continue
    name = i["name"]
    low = name.lower()
    dst = None
    if "интенсивное меню" in low:
        dst = "/Личное/Здоровье/" + name
        if " (1)" in name or "(1)" in name:
            r = delete("/Загрузки/" + name)
            print(f"ДУБЛЬ удалён: {name!r} (код {r})")
            continue
    elif "гайд" in low and "снизить вес" in low:
        dst = "/Личное/Здоровье/" + name
    elif "день прош" in low or "день прошел" in low:
        dst = "/Храм Рождества/Духовные книги/" + name
    if dst:
        r = move("/Загрузки/" + name, dst)
        print(("OK " if not isinstance(r, tuple) else f"FAIL {name!r} {r}") + f" -> {dst}")
        time.sleep(0.2)
print("DONE")
