import os
from PIL import Image

# --- CONFIGURAÇÕES ---
# Coloque aqui o caminho da pasta raiz onde estão as imagens (e subpastas)
PASTA_RAIZ = './imagens-skinshop' 

PORCENTAGEM_TAMANHO = 50  # 50% do tamanho original
QUALIDADE_JPG = 50        # Qualidade para JPG/JPEG (0-100)
COMPRESSAO_PNG = 8        # Compressão para PNG (0-9, onde 9 é máxima compressão)
# ---------------------

def otimizar_recursivo():
    if not os.path.exists(PASTA_RAIZ):
        print(f"Erro: A pasta '{PASTA_RAIZ}' não foi encontrada.")
        return

    arquivos_processados = 0
    arquivos_com_erro = 0

    print(f"--- Iniciando varredura em '{PASTA_RAIZ}' e subpastas ---")

    # os.walk percorre a pasta raiz e todas as pastas dentro dela
    for pasta_atual, subpastas, arquivos in os.walk(PASTA_RAIZ):
        
        for arquivo in arquivos:
            # Verifica as extensões
            if arquivo.lower().endswith(('.png', '.jpg', '.jpeg', '.webp')):
                caminho_completo = os.path.join(pasta_atual, arquivo)
                
                try:
                    # Abre a imagem
                    with Image.open(caminho_completo) as img:
                        
                        # 1. Pega dimensões atuais
                        largura_original, altura_original = img.size

                        # 2. Calcula novas dimensões
                        fator = PORCENTAGEM_TAMANHO / 100
                        nova_largura = int(largura_original * fator)
                        nova_altura = int(altura_original * fator)

                        # Evita redimensionar se a imagem ficar menor que 1 pixel
                        if nova_largura < 1 or nova_altura < 1:
                            print(f"Pulado (muito pequeno): {caminho_completo}")
                            continue

                        # 3. Redimensiona
                        img = img.resize((nova_largura, nova_altura), Image.Resampling.LANCZOS)

                        # 4. Sobrescreve o arquivo original (Salva no mesmo caminho)
                        # O Pillow detecta o formato pela extensão do arquivo original
                        if arquivo.lower().endswith('.png'):
                            img.save(caminho_completo, optimize=True, compress_level=COMPRESSAO_PNG)
                        else:
                            # Para JPG, JPEG, WEBP
                            img.save(caminho_completo, optimize=True, quality=QUALIDADE_JPG)

                        print(f"[OK] {arquivo}: {largura_original}x{altura_original} -> {nova_largura}x{nova_altura}")
                        arquivos_processados += 1

                except Exception as e:
                    print(f"[ERRO] Falha ao processar '{caminho_completo}': {e}")
                    arquivos_com_erro += 1

    print("-" * 40)
    print(f"Concluído!")
    print(f"Imagens otimizadas: {arquivos_processados}")
    print(f"Erros: {arquivos_com_erro}")

if __name__ == "__main__":
    otimizar_recursivo()