import requests
import matplotlib.pyplot as plt
from collections import Counter
import re

def fetch_voynich_data(url):
    response = requests.get(url)
    return response.text

def clean_text(text):
    # Elimină spațiile și caracterele non-alfabetice
    return re.sub(r'[^a-zA-Z]', '', text)

def char_frequency(text):
    return Counter(text)

def plot_frequency(freq_dict, title):
    chars, freqs = zip(*freq_dict.most_common(20))
    plt.figure(figsize=(12, 6))
    plt.bar(chars, freqs)
    plt.title(title)
    plt.xlabel('Caractere')
    plt.ylabel('Frecvență')
    plt.show()

def find_repeating_sequences(text, length):
    sequences = [text[i:i+length] for i in range(len(text) - length + 1)]
    return Counter(sequences)

def interactive_analysis():
    url = "https://www.voynich.nu/data/voyn_101.txt"
    print("Descărcăm datele din Manuscrisul Voynich...")
    voynich_text = fetch_voynich_data(url)
    cleaned_text = clean_text(voynich_text)

    while True:
        print("\nOpțiuni de analiză:")
        print("1. Afișează primele 100 de caractere")
        print("2. Calculează și afișează frecvența caracterelor")
        print("3. Caută secvențe repetitive")
        print("4. Ieșire")

        choice = input("Alege o opțiune (1-4): ")

        if choice == '1':
            print("Primele 100 de caractere:")
            print(cleaned_text[:100])
        elif choice == '2':
            freq = char_frequency(cleaned_text)
            plot_frequency(freq, "Frecvența caracterelor în Manuscrisul Voynich")
        elif choice == '3':
            length = int(input("Introdu lungimea secvenței (ex: 3): "))
            seq_freq = find_repeating_sequences(cleaned_text, length)
            print(f"Cele mai comune secvențe de {length} caractere:")
            for seq, count in seq_freq.most_common(10):
                print(f"{seq}: {count}")
        elif choice == '4':
            print("La revedere!")
            break
        else:
            print("Opțiune invalidă. Te rog alege din nou.")

if __name__ == "__main__":
    interactive_analysis()
