import os
from PIL import Image
from bs4 import BeautifulSoup
 
def corrigir_conteudo_articleBody(soup):
    div = soup.find('div', itemprop="articleBody")
    if not div:
        return None
 
    # Remove todas as imagens dentro de articleBody
    for img in div.find_all('img'):
        img.decompose()
 
    # Converte strings soltas em <p>
    for content in list(div.contents):
        if isinstance(content, str) and content.strip():
            new_p = soup.new_tag("p")
            new_p.string = content.strip()
            content.replace_with(new_p)
 
    # Remove <h2> e <p> vazios
    for tag in div.find_all(['h2', 'p']):
        if not tag.get_text(strip=True):
            tag.decompose()
 
    # Mover <p> que estão dentro de <ul> ou <ol> para fora da lista
    for list_tag in div.find_all(['ul', 'ol']):
        for p in list_tag.find_all('p'):
            new_p = soup.new_tag("p")
            new_p.string = p.get_text(strip=True)
            list_tag.insert_after(new_p)
            p.decompose()
 
    return soup
 
def adicionar_extensao_php(diretorio):
    for nome_arquivo in os.listdir(diretorio):
        caminho_completo = os.path.join(diretorio, nome_arquivo)
        if os.path.isfile(caminho_completo) and '.' not in nome_arquivo:
            novo_nome = nome_arquivo + ".php"
            novo_caminho = os.path.join(diretorio, novo_nome)
            os.rename(caminho_completo, novo_caminho)
            print(f'Renomeado: {nome_arquivo} → {novo_nome}')
 
def remover_prefixo_servicos(diretorio):
    for root, dirs, files in os.walk(diretorio):
        for filename in files:
            if filename.startswith("servicos-"):
                novo_nome_base = filename.replace("servicos-", "", 1)
                novo_nome = novo_nome_base
                caminho_antigo = os.path.join(root, filename)
                caminho_novo = os.path.join(root, novo_nome)
                # Verifica se já existe o novo nome, e adiciona numeração se necessário
                contador = 1
                nome, extensao = os.path.splitext(novo_nome_base)
                while os.path.exists(caminho_novo):
                    sufixo = f"-{contador:02d}"
                    novo_nome = f"{nome}{sufixo}{extensao}"
                    caminho_novo = os.path.join(root, novo_nome)
                    contador += 1
                os.rename(caminho_antigo, caminho_novo)
                print(f"✔ Renomeado: {filename} → {novo_nome}")
 
def remover_arquivos_impertinentes(diretorio):
    arquivos_indesejados = {
        "servico.php", "index.php", "FCC0802E2AF8A915.png",
        "captcha.php", ".htaccess", "servicos.php",
        "missao.php", "404.php", "robots.txt", "mapa-do-site.php", "home.php", "captchacodegoogle.php", "empresa.php", "contato"
    }
    padroes_sitemap = "sitemap"
    pastas_indesejadas = {"css", "font", "js", "republicador"}
    for root, dirs, files in os.walk(diretorio, topdown=True):
        # Remover pastas indesejadas
        dirs[:] = [d for d in dirs if d not in pastas_indesejadas]
        for pasta in pastas_indesejadas:
            caminho_pasta = os.path.join(root, pasta)
            if os.path.isdir(caminho_pasta):
                try:
                    os.system(f'rmdir /S /Q "{caminho_pasta}"')  # Para Windows
                    print(f"🗑 Pasta removida: {caminho_pasta}")
                except Exception as e:
                    print(f"⚠ Erro ao remover pasta {caminho_pasta}: {e}")
        for filename in files:
            # Verifica arquivos indesejados
            if filename in arquivos_indesejados or filename.startswith(padroes_sitemap):
                caminho_arquivo = os.path.join(root, filename)
                try:
                    os.remove(caminho_arquivo)
                    print(f"🗑 Arquivo removido: {caminho_arquivo}")
                except Exception as e:
                    print(f"⚠ Erro ao remover arquivo {caminho_arquivo}: {e}")
 
def correcao_html(diretorio):
    for root, _, files in os.walk(diretorio):
        for filename in files:
            if filename.endswith(".php"):
                caminho = os.path.join(root, filename)
                with open(caminho, 'r', encoding='utf-8') as f:
                    conteudo = f.read()
                soup = BeautifulSoup(conteudo, 'lxml')
                soup_corrigido = corrigir_conteudo_articleBody(soup)
                if soup_corrigido is None:
                    print(f"⏭ Ignorado (sem articleBody): {caminho}")
                    continue
                with open(caminho, 'w', encoding='utf-8') as f:
                    f.write(str(soup_corrigido))
                print(f"✔ Arquivo processado: {caminho}")
 
def correcao_pontual(diretorio):
    busca = input("Digite a string que deseja procurar: ")
    substituicao = input("Digite a string que irá substituir: ")
    for root, dirs, files in os.walk(diretorio):
        for filename in files:
            if filename.endswith(".php"):
                caminho = os.path.join(root, filename)
                with open(caminho, 'r', encoding='utf-8') as f:
                    conteudo = f.read()
                if busca not in conteudo:
                    print(f"⏭ Sem ocorrência: {caminho}")
                    continue
                conteudo_corrigido = conteudo.replace(busca, substituicao)
                with open(caminho, 'w', encoding='utf-8') as f:
                    f.write(conteudo_corrigido)
                print(f"✔ Substituição aplicada em: {caminho}")
 
def tratar_imagens(diretorio):
    formatos_validos = {'.jpg', '.jpeg', '.png', '.bmp', '.tiff', '.gif'}
    for root, _, files in os.walk(diretorio):
        for filename in files:
            nome_original, ext = os.path.splitext(filename)
            ext = ext.lower()
            if ext not in formatos_validos:
                continue
            caminho_antigo = os.path.join(root, filename)
            novo_nome = nome_original + '.webp'
            caminho_novo = os.path.join(root, novo_nome)
            try:
                with Image.open(caminho_antigo) as img:
                    largura, altura = img.size
                    if largura > 800:
                        nova_altura = int((800 / largura) * altura)
                        img = img.resize((800, nova_altura), Image.LANCZOS)
                    img.save(caminho_novo, 'WEBP', quality=90)
                    print(f"✔ Convertida: {filename} → {novo_nome}")
                # Remover imagem original (descomente se quiser apagar)
                os.remove(caminho_antigo)
            except Exception as e:
                print(f"⚠ Erro ao processar {filename}: {e}")
 
def menu_principal():
    diretorio_alvo = input("Digite o caminho da pasta com os arquivos: ").strip()
    if not os.path.isdir(diretorio_alvo):
        print("❌ Caminho inválido. Verifique e tente novamente.")
        return
    print("\nO que deseja fazer?")
    print("1 - Remover arquivos impertinentes")
    print("2 - Adicionar extensão PHP")
    print("3 - Correção HTML (tratar HTML do articleBody)")
    print("4 - Correção pontual (substituição de texto específica)")
    print("5 - Remover prefixo (servicos-) dos nomes dos arquivos img")
    print("6 - Tratar Imagens (conversão para .webp e otimização de largura)")
    escolha = input("Escolha uma opção (1, 2 ou 3): ").strip()
    if escolha == "1":
        remover_arquivos_impertinentes(diretorio_alvo)
    elif escolha == "2":
        adicionar_extensao_php(diretorio_alvo)
    elif escolha == "3":
        correcao_html(diretorio_alvo)
    elif escolha == "4":
        correcao_pontual(diretorio_alvo)
    elif escolha == "5":
        remover_prefixo_servicos(diretorio_alvo)
    elif escolha == "6":
        tratar_imagens(diretorio_alvo)
    else:
        print("❌ Opção inválida. Encerrando.")
 
# Início do script
menu_principal()