import shutil
from pathlib import Path
from PIL import Image, UnidentifiedImageError

REJECTS = Path("/home/vk/analytics/streamlit/radio/uploads/rejects")
AUDIO_ROOT = Path("/home/vk/analytics/streamlit/radio/uploads/audio")
VIDEO_ROOT = Path("/home/vk/analytics/streamlit/radio/uploads/video")

# Проверка — можно ли вернуть превьюху (валидна и больше 1КБ)
def is_valid_preview(preview_file):
    try:
        if preview_file.stat().st_size < 1024:
            return False
        with Image.open(preview_file) as img:
            img.verify()
        return True
    except (UnidentifiedImageError, Exception):
        return False

def restore_from_rejects(root):
    for item in REJECTS.iterdir():
        if item.is_dir():
            # Каталоги аудио или видео — по uuid в начале
            target = None
            if any(item.name.endswith(ext) for ext in ["_flac", "_wav", "_mp3", "_aac", "_ogg", "_m4a"]):
                target = AUDIO_ROOT / item.name
            elif any(item.name.endswith(ext) for ext in ["_mp4", "_avi", "_mov", "_mkv", "_webm"]):
                target = VIDEO_ROOT / item.name
            elif item.name.endswith("_original_preview"):
                # Превью-папка — ищем куда возвращать
                # Сначала аудио, потом видео
                for base in [AUDIO_ROOT, VIDEO_ROOT]:
                    prev_dir = base / ".preview" / item.name
                    if not prev_dir.exists():
                        # Проверяем превьюху на валидность
                        jpgs = list(item.glob("*_original_preview_original.jpg"))
                        if jpgs and is_valid_preview(jpgs[0]):
                            prev_dir.parent.mkdir(exist_ok=True, parents=True)
                            shutil.move(str(item), str(prev_dir))
                            print(f"Вернул превью: {item} -> {prev_dir}")
                        break
            if target and not target.exists():
                shutil.move(str(item), str(target))
                print(f"Вернул каталог: {item} -> {target}")
        elif item.is_file():
            # Одиночные файлы с превью (на всякий случай)
            if item.name.endswith("_original_preview_original.jpg"):
                for base in [AUDIO_ROOT, VIDEO_ROOT]:
                    target_dir = base / ".preview" / (item.name.split("_original_preview_original.jpg")[0] + "_original_preview")
                    if target_dir.exists():
                        shutil.move(str(item), str(target_dir / item.name))
                        print(f"Вернул файл превью: {item} -> {target_dir / item.name}")

restore_from_rejects(AUDIO_ROOT)
restore_from_rejects(VIDEO_ROOT)
