import os
import sys
import threading

MAX_TEXT_LENGTH = 1024
FORBIDDEN_WORDS_COUNT = 40

forbidden_words = [
    "recovery", "techie", "http", "https", "digital", "hack", "::", "//", "com",
    "@", "crypto", "bitcoin", "wallet", "hacker", "welcome", "whatsapp", "email", "cryptocurrency",
    "stolen", "freeze", "quick", "crucial", "tracing", "scammers", "expers", "hire", "century",
    "transaction", "essential", "managing", "contact", "contacting", "understanding", "assets", "funds",
]

class AnalysisResult:
    def __init__(self, filename):
        self.filename = filename
        self.total_word_count = 0
        self.total_capitalized_count = 0
        self.total_sentence_count = 0
        self.total_number_count = 0
        self.total_forbidden_count = 0

def is_forbidden(word):
    return word in forbidden_words

def read_file(filename):
    if not os.path.exists(filename):
        print(f"File doesn't exist: {filename}")
        return None

    content = ''
    with open(filename, 'r') as file:
        while True:
            chunk = file.read(MAX_TEXT_LENGTH)
            if not chunk:
                break
            content += chunk

    return content

def analyze_file(result):
    text = read_file(result.filename)
    if text:
        result.total_sentence_count = text.count('.')
        tokens = text.split()

        for token in tokens:
            result.total_word_count += 1

            if token[0].isupper():
                result.total_capitalized_count += 1

            if any(char.isdigit() for char in token):
                result.total_number_count += 1

            if is_forbidden(token):
                result.total_forbidden_count += 1

def main():
    if len(sys.argv) < 2:
        print(f"Usage: {sys.argv[0]} <file1> <file2> ... <fileN>")
        return

    threads = []
    results = []

    for filename in sys.argv[1:]:
        result = AnalysisResult(filename)
        results.append(result)
        thread = threading.Thread(target=analyze_file, args=(result,))
        threads.append(thread)
        thread.start()

    for thread in threads:
        thread.join()

    total_word_count = sum(result.total_word_count for result in results)
    total_capitalized_count = sum(result.total_capitalized_count for result in results)
    total_sentence_count = sum(result.total_sentence_count for result in results)
    total_number_count = sum(result.total_number_count for result in results)
    total_forbidden_count = sum(result.total_forbidden_count for result in results)

    capitalized_percentage = (total_word_count > 0) * (total_capitalized_count / total_word_count * 100.0)
    forbidden_percentage = (total_word_count > 0) * (total_forbidden_count / total_word_count * 100.0)
    word_count_per_sentence = (total_sentence_count > 0) * (total_word_count / total_sentence_count)

    print(f"\nTotal Words: {total_word_count}")
    print(f"Total Capitalized words: {total_capitalized_count}")
    print(f"Total Sentences: {total_sentence_count}")
    print(f"Total Numbers: {total_number_count}")
    print(f"Total Forbidden words: {total_forbidden_count}")
    print(f"Capitalized percentage: {capitalized_percentage:.6f}%")
    print(f"Forbidden percentage: {forbidden_percentage:.6f}%")
    print(f"Word count per sentence: {word_count_per_sentence:.6f}")
    print(f"Total files read: {len(sys.argv) - 1}")

if __name__ == "__main__":
    main()