#!/usr/bin/env python3
"""
Script para extrair linhas contendo '.br' de um arquivo texto
Mostra logs em tempo real durante a execução
"""

import os
import sys
from datetime import datetime

def log(message, level="INFO"):
    """Imprime log com timestamp"""
    timestamp = datetime.now().strftime("%H:%M:%S")
    print(f"[{timestamp}] [{level}] {message}")
    sys.stdout.flush()  # Força impressão imediata

def extract_br_lines():
    """Extrai linhas com .br do arquivo"""

    # Caminhos dos arquivos
    input_file = "/Volumes/Novo volume/lista.txt"
    output_file = "/Users/neog/lista_br.txt"  # Salva no SSD interno

    log("🚀 Iniciando extração de linhas com '.br'")
    log(f"📂 Arquivo de entrada: {input_file}")
    log(f"💾 Arquivo de saída: {output_file}")

    # Verifica se o arquivo existe
    if not os.path.exists(input_file):
        log(f"❌ ERRO: Arquivo não encontrado: {input_file}", "ERROR")
        return False

    # Verifica se o volume está montado
    if not os.path.exists("/Volumes/Novo volume"):
        log("❌ ERRO: Volume 'Novo volume' não está montado", "ERROR")
        return False

    log("✅ Arquivo encontrado")

    # Obtém tamanho do arquivo
    file_size = os.path.getsize(input_file)
    file_size_mb = file_size / (1024 * 1024)
    log(f"📊 Tamanho do arquivo: {file_size_mb:.2f} MB ({file_size:,} bytes)")

    # Contadores
    total_lines = 0
    br_lines = 0
    bytes_read = 0

    try:
        log("📖 Abrindo arquivo para leitura...")

        with open(input_file, 'r', encoding='utf-8', errors='ignore') as infile:
            with open(output_file, 'w', encoding='utf-8') as outfile:

                log("✍️  Processando linhas...")

                for line in infile:
                    total_lines += 1
                    bytes_read += len(line.encode('utf-8'))

                    # Verifica se contém .br
                    if '.br' in line.lower():
                        outfile.write(line)
                        br_lines += 1

                        # Log a cada 100 linhas encontradas
                        if br_lines % 100 == 0:
                            progress = (bytes_read / file_size) * 100
                            log(f"🔍 Encontradas {br_lines} linhas com '.br' (Progresso: {progress:.1f}%)")

                    # Log de progresso a cada 10000 linhas totais
                    if total_lines % 10000 == 0:
                        progress = (bytes_read / file_size) * 100
                        log(f"⏳ Processadas {total_lines:,} linhas ({progress:.1f}%)")

        log("✅ Processamento concluído!")
        log(f"📈 Estatísticas finais:")
        log(f"   • Total de linhas lidas: {total_lines:,}")
        log(f"   • Linhas com '.br' encontradas: {br_lines:,}")
        log(f"   • Percentual: {(br_lines/total_lines*100):.2f}%")
        log(f"   • Arquivo salvo em: {output_file}")

        # Verifica tamanho do arquivo de saída
        if os.path.exists(output_file):
            output_size = os.path.getsize(output_file)
            output_size_mb = output_size / (1024 * 1024)
            log(f"   • Tamanho do arquivo de saída: {output_size_mb:.2f} MB")

        log("🎉 Extração finalizada com sucesso!")
        return True

    except PermissionError:
        log(f"❌ ERRO: Sem permissão para acessar o arquivo", "ERROR")
        return False
    except Exception as e:
        log(f"❌ ERRO: {str(e)}", "ERROR")
        return False

if __name__ == "__main__":
    log("=" * 60)
    log("🇧🇷 EXTRATOR DE LINHAS .BR")
    log("=" * 60)

    success = extract_br_lines()

    log("=" * 60)
    if success:
        log("✅ Script finalizado com sucesso", "SUCCESS")
        sys.exit(0)
    else:
        log("❌ Script finalizado com erros", "ERROR")
        sys.exit(1)
