import subprocess
import os
import re
from pyrogram import Client

# === Inicia Pyrogram ===
app = Client("my_account")
app.start()

chat_id = app.get_me().id

# === Caminho base ===
base_path = "/var/www/kim/rave/static/drige"

# === Escolha da pasta ===
print("\n📁 Pastas disponíveis:\n")
for pasta in sorted([f for f in os.listdir(base_path) if os.path.isdir(os.path.join(base_path, f))]):
    print(f"📂 {pasta}")

subpasta = input("\nDigite o nome da subpasta que deseja usar (ex: POESIA): ").strip()
pasta_final = os.path.join(base_path, subpasta)

if not os.path.exists(pasta_final):
    print("❌ Essa pasta não existe.")
    app.stop()
    exit()

# === Coleta de vídeos ===
videos = [f for f in os.listdir(pasta_final) if f.lower().endswith((".mkv", ".mp4", ".mov"))]

if not videos:
    print("⚠️ Nenhum arquivo de vídeo encontrado nessa pasta.")
    app.stop()
    exit()

# === Funções auxiliares ===
def extrai_numero_nome(nome):
    match = re.search(r"(\d+)", nome)
    return int(match.group(1)) if match else 0

def extrai_numero_episodio(nome):
    match = re.search(r"S\d+E(\d+)", nome, re.IGNORECASE)
    return int(match.group(1)) if match else 0

# === Tipo de ordenação ===
print("\n📂 Escolha o tipo de ordenação:")
print("1️⃣  Por número no nome (ex: 1.mkv, 2.mkv...)")
print("2️⃣  Por episódio (SxxExx)")
print("3️⃣  Por nome alfabético")

tipo = input("\nDigite 1, 2 ou 3: ").strip()

if tipo == "1":
    videos.sort(key=extrai_numero_nome)
    print("✅ Ordenado por número no nome.")
elif tipo == "2":
    videos.sort(key=extrai_numero_episodio)
    print("✅ Ordenado por número do episódio.")
else:
    videos.sort()
    print("✅ Ordenado alfabeticamente.")

# === Mostra lista ===
print("\n🎬 Arquivos disponíveis:\n")
for idx, nome in enumerate(videos, start=1):
    print(f"{idx}. {nome}")

# === Escolha dos vídeos ===
entrada = input("\nDigite os números dos vídeos que deseja enviar (ex: 1,3-5,7): ").strip()

def parse_escolhas(txt):
    numeros = set()
    for parte in txt.split(","):
        if "-" in parte:
            inicio, fim = parte.split("-")
            numeros.update(range(int(inicio), int(fim) + 1))
        else:
            numeros.add(int(parte))
    return sorted(numeros)

try:
    escolhas = parse_escolhas(entrada)
    escolhas = [n for n in escolhas if 1 <= n <= len(videos)]
    if not escolhas:
        raise ValueError("Nenhum número válido selecionado.")
except Exception as e:
    print(f"❌ Entrada inválida: {e}")
    app.stop()
    exit()

# === Envio dos vídeos ===
for escolha in escolhas:
    nome_arquivo = videos[escolha - 1]
    nome2 = os.path.join(pasta_final, nome_arquivo)
    print(f"\n🚀 Enviando: {nome_arquivo}")

    try:
        # Extrai informações com mediainfo
        mediainfo_output = subprocess.getstatusoutput(f"mediainfo \"{nome2}\"")[1]

        # Captura metadados
        width_match = re.search(r"(Width|Largura)\s*:\s*(\d+)", mediainfo_output)
        height_match = re.search(r"(Height|Altura)\s*:\s*(\d+)", mediainfo_output)
        duration_match = re.search(r"(Duration|Duração)\s*:\s*([\d\.]+)", mediainfo_output)

        if not (width_match and height_match and duration_match):
            print("⚠️ Não foi possível extrair metadados, pulando.")
            continue

        width = int(width_match.group(2))
        height = int(height_match.group(2))
        duration = int(float(duration_match.group(2)))

        print(f"📏 Duração: {duration}s | Resolução: {width}x{height}")

        # Miniatura
        thumb_path = os.path.join(pasta_final, f"{os.path.splitext(nome_arquivo)[0]}.jpeg")
        subprocess.getstatusoutput(
            f"ffmpeg -i \"{nome2}\" -s 320x180 -r 1 -ss 00:00:10 -vframes 1 \"{thumb_path}\""
        )

        # Envia o vídeo
        app.send_video(
            chat_id,
            open(nome2, "rb"),
            caption=nome_arquivo,
            width=width,
            height=height,
            duration=duration,
            thumb=open(thumb_path, "rb") if os.path.exists(thumb_path) else None,
        )

        print("✅ Enviado com sucesso!")

        # Remove miniatura temporária (opcional)
        if os.path.exists(thumb_path):
            os.remove(thumb_path)

    except Exception as e:
        print(f"❌ Erro ao enviar {nome_arquivo}: {e}")
        continue

print("\n🎉 Todos os vídeos selecionados foram enviados.")
app.stop()
print("Processo completo.")
