import os
from pathlib import Path
from PIL import Image, ImageOps

# Mesma pasta raiz usada no gerar_albums.py — ajuste se necessário.
RAIZ = r"C:\Users\Gerson Wandermurem\Desktop\Arquivos do Projeto\Imagens"

EXTENSOES = {".jpg", ".jpeg", ".png", ".webp"}

# Tag EXIF "Orientation"
TAG_ORIENTACAO = 0x0112


def corrigir_arquivo(caminho):
    """
    Abre a imagem, olha a tag EXIF de orientação (a mesma que o
    Windows/celular usa pra saber que a foto precisa girar) e, se ela
    estiver diferente de "normal", gira os pixels de verdade e regrava
    o arquivo já do jeito certo — sem depender do visualizador (TV,
    navegador etc.) aplicar a rotação sozinho.

    Retorna True se a foto foi corrigida, False se já estava normal.
    """
    with Image.open(caminho) as img:
        try:
            exif = img.getexif()
            orientacao = exif.get(TAG_ORIENTACAO, 1)
        except Exception:
            orientacao = 1

        if orientacao == 1:
            return False  # já está correta, nada a fazer

        img_corrigida = ImageOps.exif_transpose(img)  # gira os pixels de acordo com o EXIF

        # Remove a tag de orientação depois de já ter girado os pixels,
        # pra nenhum programa girar a foto de novo por cima da correção.
        exif_final = img_corrigida.getexif()
        if TAG_ORIENTACAO in exif_final:
            del exif_final[TAG_ORIENTACAO]

        parametros = {}
        formato = (img.format or "").upper()
        if formato in ("JPEG", "JPG"):
            parametros["quality"] = 95
            parametros["exif"] = exif_final.tobytes()
        elif formato == "WEBP":
            parametros["quality"] = 95

        img_corrigida.save(caminho, **parametros)
        return True


def corrigir_pasta(raiz):
    raiz = Path(raiz)
    if not raiz.is_dir():
        print(f"❌ Pasta não encontrada: {raiz}")
        return

    total = 0
    corrigidas = 0
    erros = 0

    for dirpath, _dirnames, filenames in os.walk(raiz):
        for nome in filenames:
            if Path(nome).suffix.lower() not in EXTENSOES:
                continue
            caminho = os.path.join(dirpath, nome)
            total += 1
            try:
                if corrigir_arquivo(caminho):
                    corrigidas += 1
                    print(f"[OK] Corrigida: {caminho}")
            except Exception as e:
                erros += 1
                print(f"[ERRO] {caminho}: {e}")

    print("\n" + "=" * 60)
    print(f"Imagens verificadas: {total}")
    print(f"Corrigidas agora:    {corrigidas}")
    print(f"Já estavam certas:   {total - corrigidas - erros}")
    if erros:
        print(f"Com erro:            {erros}")
    print("Concluído!")


if __name__ == "__main__":
    corrigir_pasta(RAIZ)
