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

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 mkdir(path):
    url = "https://cloud-api.yandex.net/v1/disk/resources?path=" + urllib.parse.quote(path)
    req = urllib.request.Request(url, method="PUT", headers=H)
    try:
        with urllib.request.urlopen(req, timeout=60) as r:
            return True
    except urllib.error.HTTPError as e:
        return "already" in e.read().decode(errors="replace")

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")[:200]

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

# 1. корневые папки
for p in ["/Добротный дом", "/Храм Рождества", "/Личное", "/Фото", "/Видео", "/Компьютеры", "/Архивы",
          "/Храм Рождества/Духовные книги", "/Личное/Здоровье", "/Фото/С телефона"]:
    mkdir(p)

# 2. операции (from, to)
OPS = [
    # Бизнес
    ("/!!!", "/Добротный дом/Рендеры (архив !!!)"),
    ("/ДД", "/Добротный дом/ДД"),
    ("/SMM", "/Добротный дом/SMM"),
    ("/ПРОЕКТЫ", "/Добротный дом/ПРОЕКТЫ"),
    ("/Плакаты на печать", "/Добротный дом/Плакаты на печать"),
    ("/Загрузки/Добротный дом", "/Добротный дом/Резерв Добротный дом"),
    ("/Загрузки/Добротный дом (2)", "/Добротный дом/Резерв Добротный дом (2)"),
    ("/Загрузки/Добротный дом (ЛОГОТИПЫ)", "/Добротный дом/Логотипы (загрузки)"),
    ("/Загрузки/Дом 170 рендеры", "/Добротный дом/Дом 170 рендеры"),
    ("/Загрузки/Добротный дом.mp4", "/Добротный дом/Добротный дом.mp4"),
    ("/Загрузки/Добротный дом 480р.mp4", "/Добротный дом/Добротный дом 480р.mp4"),
    ("/Загрузки/Александрия - 3.zip", "/Добротный дом/Александрия - 3.zip"),
    ("/Загрузки/Договор найма и акты.docx", "/Добротный дом/Договор найма и акты.docx"),
    # Церковное
    ("/Иерусалим", "/Храм Рождества/Иерусалим"),
    ("/Стеняев", "/Храм Рождества/Стеняев"),
    ("/Душа", "/Храм Рождества/Душа"),
    ("/КНК ДРЕССИРОВКА", "/Храм Рождества/КНК ДРЕССИРОВКА"),
    ("/Загрузки/Фрески Лавра", "/Храм Рождества/Фрески Лавра"),
    ("/Загрузки/Гаслов-И.В.-Кашкин-А.С.-Православное-богослужение-2011.pdf", "/Храм Рождества/Духовные книги/Гаслов-Кашкин - Православное богослужение.pdf"),
    ("/Загрузки/Дневник-кающегося_26.12.14.pdf", "/Храм Рождества/Духовные книги/Дневник кающегося.pdf"),
    ("/Загрузки/Ispoved_2022.pdf", "/Храм Рождества/Духовные книги/Исповедь 2022.pdf"),
    ("/Бонус - Практика Освобождение ума.pdf", "/Храм Рождества/Духовные книги/Практика Освобождение ума.pdf"),
    ("/Загрузки/Бонус - Практика День Прошёл.pdf", "/Храм Рождества/Духовные книги/Практика День Прошёл.pdf"),
    # Личное
    ("/Алла и Михаил. 21.11.24", "/Личное/Алла и Михаил. 21.11.24"),
    ("/Загрузки/ПОЛНЫЙ ФИЛЬМ СВАДЬБЫ АЛЛЫ И МИХАИЛА.mp4", "/Личное/ПОЛНЫЙ ФИЛЬМ СВАДЬБЫ АЛЛЫ И МИХАИЛА.mp4"),
    ("/Geely Monjaro", "/Личное/Geely Monjaro"),
    ("/Загрузки/Monjaro-Starter-Pack-v2", "/Личное/Geely Monjaro/Starter-Pack"),
    ("/Загрузки/Отработка Geely Monjaro", "/Личное/Geely Monjaro/Отработка"),
    ("/Обои для рабочего стола.jpg", "/Личное/Обои для рабочего стола.jpg"),
    ("/Загрузки/Гайд_Пошаговый план из 7 шагов, как быстро снизить вес с пользой для здоровья.pdf", "/Личное/Здоровье/Гайд по снижению веса.pdf"),
    ("/Загрузки/Интенсивное меню на снижении веса День 1.pdf", "/Личное/Здоровье/Интенсивное меню День 1.pdf"),
    ("/Загрузки/Рецепты 4 жиросжигающих напитка.pdf", "/Личное/Здоровье/Рецепты 4 напитка.pdf"),
    # Фото
    ("/Фотокамера", "/Фото/Фотокамера"),
    ("/Мои Яндекс.Картинки", "/Фото/Мои Яндекс.Картинки"),
    ("/Скриншоты", "/Фото/Скриншоты"),
    ("/Загрузки/фото презентации Бауман", "/Фото/фото презентации Бауман"),
    ("/Загрузки/1.3.png", "/Фото/1.3.png"),
    # Видео
    ("/Загрузки/Небо_2021.mp4", "/Видео/Небо_2021.mp4"),
    ("/Загрузки/0219A3.mov", "/Видео/0219A3.mov"),
    ("/Загрузки/0219A8.mov", "/Видео/0219A8.mov"),
    ("/Загрузки/20141123_092002.mp4", "/Видео/20141123_092002.mp4"),
    ("/Загрузки/Домашний Тренинг Видео.avi", "/Видео/Домашний Тренинг Видео.avi"),
    # Компьютеры
    ("/Компьютер BLAGOVESTROY", "/Компьютеры/Компьютер BLAGOVESTROY"),
    ("/Компьютер WIN-QN6EAMHM38J", "/Компьютеры/Компьютер WIN-QN6EAMHM38J"),
    # Архивы
    ("/NEW.7z", "/Архивы/NEW.7z"),
    ("/Загрузки/u-centersetup_v25.03_0.zip", "/Архивы/u-centersetup.zip"),
    ("/Загрузки/Активация.rar", "/Архивы/Активация.rar"),
    ("/Загрузки/ResetMaintenance.apk", "/Архивы/ResetMaintenance.apk"),
]

ok, fail = 0, 0
for frm, to in OPS:
    r = move(frm, to)
    if isinstance(r, tuple):
        print(f"FAIL {frm} -> {to}: {r}")
        fail += 1
    else:
        print(f"OK {frm} -> {to}")
        ok += 1
    time.sleep(0.2)

# дубль PDF
r = delete("/Личное/Здоровье/Интенсивное меню на снижении веса День 1 (1).pdf")
print(f"ДУБЛЬ удалён (код {r})")

# HEIC-фото из корня
import glob  # не нужно, ищем через API
def list_root():
    url = "https://cloud-api.yandex.net/v1/disk/resources?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", [])
for i in list_root():
    if i["type"] == "file" and i["name"].lower().endswith((".heic", ".jpg", ".jpeg", ".png")):
        r = move("/" + i["name"], "/Фото/С телефона/" + i["name"])
        print(("OK" if not isinstance(r, tuple) else f"FAIL {i['name']} {r}") + " HEIC->Фото")
        time.sleep(0.2)

print(f"ИТОГО: ок={ok}, fail={fail}")
