# menu.py

import os
from config import SETTINGS, OUTPUT_DIR
from utils.helpers import save_settings
from utils.helpers import (
    clear_trash, clear_short, clear_images, clear_video
)
from utils.search import search_by_alphabet, search_by_keywords
from utils.downloader import process_symbols
from utils.dir_filter import process_folder


async def main_menu():
    while True:
        print("\nТекущие настройки:")
        for key, value in SETTINGS.items():
            print(f"  {key}: {value}")
        print()
        print("""
1. Поиск по алфавиту
2. Поиск по ключевым словам
3. Настройки
4. Очистить каталог _trash
5. Очистить каталог _short
6. Очистить каталог images
7. Очистить каталог video
8. Отфильтровать каталог video
9. Выход
""")
        choice = input("Выберите опцию: ")
        match choice:
            case "1":
                await alphabet_search()
            case "2":
                await keyword_search()
            case "3":
                settings_menu()
            case "4":
                clear_trash()
            case "5":
                clear_short()
            case "6":
                clear_images()
            case "7":
                clear_video()
            case "8":
                filter_folder()
            case "9":
                print("Выход...")
                break
            case _:
                print("Неверная опция, попробуйте снова.")


def settings_menu():
    while True:
        print("""
1. Что искать
2. Минимальная продолжительность видео
3. До какого id искать
4. Длина комбинации для поиска по алфавиту
5. Назад
""")
        choice = input("Выберите опцию: ")
        match choice:
            case "1":
                search_type_menu()
            case "2":
                try:
                    SETTINGS["min_video_length"] = int(
                        input("Мин. продолжительность: "))
                    save_settings()
                except ValueError:
                    print("Введите число!")
            case "3":
                try:
                    SETTINGS["max_id"] = int(input("Макс. ID: "))
                    save_settings()
                except ValueError:
                    print("Введите число!")
            case "4":
                try:
                    SETTINGS["combination_length"] = int(
                        input("Длина комбинации: "))
                    save_settings()
                except ValueError:
                    print("Введите число!")
            case "5":
                break
            case _:
                print("Неверная опция.")


def search_type_menu():
    while True:
        print("""
1. Только изображения
2. Только видео
3. Изображения и видео
4. Назад
""")
        choice = input("Выберите опцию: ")
        match choice:
            case "1":
                SETTINGS["search_type"] = "img"
                save_settings()
            case "2":
                SETTINGS["search_type"] = "video"
                save_settings()
            case "3":
                SETTINGS["search_type"] = "both"
                save_settings()
            case "4":
                break
            case _:
                print("Неверная опция.")


# -------------------- Алфавит --------------------
async def alphabet_search():
    length = SETTINGS.get("combination_length", 1)
    try:
        length_input = input(f"Длина комбинации (текущая {length}): ")
        if length_input:
            length = int(length_input)
            SETTINGS["combination_length"] = length
            save_settings()
    except ValueError:
        print("Введите число!")

    # генерируем комбинации
    alphabet_list = search_by_alphabet(length)
    if not alphabet_list:
        print("[-] Комбинации не сгенерированы.")
        return

    print(
        f"[+] Сгенерированно {len(alphabet_list)} комбинаций. Проверяем страницы и скачиваем медиа...")
    # батчи, проверка страниц, скачивание и запись в found_media.txt
    await process_symbols(alphabet_list)

    # фильтруем видео после скачивания
    video_dir = os.path.join(OUTPUT_DIR, "video")
    process_folder(video_dir)
    print("[+] Готово.")


# -------------------- Ключевые слова --------------------
async def keyword_search():
    # получаем текущие ключевые слова через функцию
    keywords = search_by_keywords()

    # даём возможность пользователю изменить их
    kw_input = input(f"Ключевые слова через пробел (текущие: {keywords}): ")
    if kw_input:
        keywords = kw_input.split()
        SETTINGS["keywords"] = keywords  # сохраняем в SETTINGS
        save_settings()

    if not keywords:
        print("[-] Нет ключевых слов для поиска.")
        return

    print(
        f"[+] Начинаем поиск и скачивание по {len(keywords)} ключевым словам...")
    # передаём чистые ключи в process_symbols — URL будут строиться уже там
    await process_symbols(keywords)

    # фильтруем видео после скачивания
    video_dir = os.path.join(OUTPUT_DIR, "video")
    process_folder(video_dir)
    print("[+] Готово.")


def filter_folder():
    from config import OUTPUT_DIR
    print(f"[+] Фильтруем каталог {OUTPUT_DIR}/video...")
    video_dir = os.path.join(OUTPUT_DIR, "video")
    process_folder(video_dir)
    print("[+] Фильтрация завершена.")
