#!/usr/bin/env python3
"""
Busca palavras-chave em arquivo de texto e salva resultados
Case-insensitive search (maiúsculas e minúsculas)
"""

import os
import sys
from datetime import datetime


def search_in_file(file_path, keyword, output_file=None):
    """
    Busca keyword em file_path (case-insensitive) e salva resultados

    Args:
        file_path: Caminho do arquivo para buscar
        keyword: Palavra-chave a buscar
        output_file: Arquivo de saída (opcional, padrão: resultados_TIMESTAMP.txt)
    """

    # Verifica se arquivo existe
    if not os.path.exists(file_path):
        print(f"❌ Erro: Arquivo não encontrado: {file_path}")
        return False

    # Define arquivo de saída
    if output_file is None:
        timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
        output_file = f"resultados_{timestamp}.txt"

    print(f"🔍 Buscando '{keyword}' em: {file_path}")
    print(f"💾 Salvando resultados em: {output_file}")
    print("━" * 60)

    try:
        # Lê arquivo e busca linhas
        matching_lines = []
        total_lines = 0
        keyword_lower = keyword.lower()

        with open(file_path, 'r', encoding='utf-8', errors='ignore') as f:
            for line_num, line in enumerate(f, 1):
                total_lines += 1
                # Busca case-insensitive
                if keyword_lower in line.lower():
                    matching_lines.append({
                        'line_num': line_num,
                        'content': line.rstrip('\n')
                    })

        # Salva resultados
        with open(output_file, 'w', encoding='utf-8') as out:
            # Cabeçalho
            out.write(f"Resultados da busca por: '{keyword}'\n")
            out.write(f"Arquivo: {file_path}\n")
            out.write(f"Data: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n")
            out.write(f"Total de linhas no arquivo: {total_lines}\n")
            out.write(f"Linhas encontradas: {len(matching_lines)}\n")
            out.write("=" * 80 + "\n\n")

            # Resultados
            for match in matching_lines:
                out.write(f"Linha {match['line_num']}: {match['content']}\n")

        # Resumo no console
        print(f"✅ Busca concluída!")
        print(f"   Total de linhas no arquivo: {total_lines}")
        print(f"   Linhas encontradas: {len(matching_lines)}")
        print(f"   Resultados salvos em: {output_file}")

        # Mostra primeiras 5 linhas no console
        if matching_lines:
            print("\n📋 Primeiras linhas encontradas:")
            for match in matching_lines[:5]:
                print(f"   Linha {match['line_num']}: {match['content'][:70]}...")
            if len(matching_lines) > 5:
                print(f"   ... e mais {len(matching_lines) - 5} linhas")

        return True

    except Exception as e:
        print(f"❌ Erro ao processar arquivo: {e}")
        return False


def main():
    """Função principal com interface interativa"""

    print("=" * 60)
    print("🔍 BUSCA DE PALAVRAS-CHAVE EM ARQUIVO")
    print("=" * 60)
    print()

    # Define arquivo padrão
    default_file = "/Volumes/Novo volume/lista.txt"

    # Solicita caminho do arquivo
    print(f"Arquivo padrão: {default_file}")
    file_path = input("Digite o caminho do arquivo (Enter para usar padrão): ").strip()

    if not file_path:
        file_path = default_file

    # Solicita palavra-chave
    keyword = input("\nDigite a palavra-chave para buscar: ").strip()

    if not keyword:
        print("❌ Erro: Palavra-chave não pode ser vazia!")
        sys.exit(1)

    # Solicita arquivo de saída (opcional)
    output = input("\nArquivo de saída (Enter para gerar automaticamente): ").strip()

    if not output:
        output = None

    print()

    # Executa busca
    success = search_in_file(file_path, keyword, output)

    sys.exit(0 if success else 1)


if __name__ == "__main__":
    # Verifica se foi passado argumentos via linha de comando
    if len(sys.argv) >= 3:
        # Modo linha de comando: python3 search_keywords.py <arquivo> <keyword> [output]
        file_path = sys.argv[1]
        keyword = sys.argv[2]
        output = sys.argv[3] if len(sys.argv) >= 4 else None

        search_in_file(file_path, keyword, output)
    else:
        # Modo interativo
        main()
