import re
import sys

def aexoscript_translate(text, reverse=False):
    """
    Converts English text to Æxøscript and vice versa.
    
    :param text: Input text to translate.
    :param reverse: If True, converts Æxøscript back to English.
    :return: Translated text.
    """
    # Letter substitutions
    subs = {
        "A": "@", "B": "β", "C": "ς", "D": "ð", "E": "3", "F": "|=", "G": "9", "H": "#",
        "I": "!", "J": "ʝ", "K": "X", "L": "|", "M": "ɯ", "N": "|\\|", "O": "Ø", "P": "ρ",
        "Q": "Ϙ", "R": "®", "S": "5", "T": "†", "U": "μ", "V": "\\/", "W": "ω", "X": "×",
        "Y": "¥", "Z": "2",
        "0": "Ø", "1": "!", "2": "2", "3": "3", "4": "ϟ", "5": "5", "6": "9", "7": "π", "8": "∞", "9": "ɣ"
    }
    
    # Codeword replacements
    codewords = {
        "no survivors": "N3m0†h",
        "hidden in plain sight": "Ωv3r§h@d0w",
        "watch closely": "†h3 ρu£§3",
        "destroy all evidence": "βuяn††h3β00k",
        "corrupted individual": "Uπh0lyX",
        "critical danger": "H0r!z0πβ£@cK",
        "do not engage": "Z3r0†rμs†"
    }
    
    if reverse:
        # Reverse codeword replacements
        for code, phrase in codewords.items():
            text = re.sub(rf'\b{re.escape(code)}\b', phrase, text, flags=re.IGNORECASE)
        
        # Reverse character conversion
        reverse_subs = {v: k for k, v in subs.items()}
        translated_text = ""
        words = text.split()
        for word in words:
            if word in codewords.values():
                translated_text += word + " "  # Preserve codewords
            else:
                translated_text += "".join(reverse_subs.get(char, char) for char in word) + " "
    else:
        # Replace codewords first
        for phrase, code in codewords.items():
            text = re.sub(rf'\b{re.escape(phrase)}\b', code, text, flags=re.IGNORECASE)
        
        # Convert remaining characters
        translated_text = ""
        words = text.split()
        for word in words:
            if word in codewords.values():
                translated_text += word + " "  # Preserve codewords
            else:
                translated_text += "".join(subs.get(char.upper(), char) for char in word) + " "
    
    return translated_text.strip()

# Example Usage
if __name__ == "__main__":
    if len(sys.argv) > 1:
        # Read from file
        with open(sys.argv[1], "r", encoding="utf-8") as file:
            input_text = file.read()
        reverse_mode = "-r" in sys.argv
        output_text = aexoscript_translate(input_text, reverse=reverse_mode)
        print("Output:", output_text)
    else:
        # Interactive mode
        english_text = input("Enter text to translate: ")
        mode = input("Translate to Æxøscript (T) or Reverse to English (R)? ").strip().lower()
        
        if mode == 'r':
            output = aexoscript_translate(english_text, reverse=True)
        else:
            output = aexoscript_translate(english_text)
        
        print("Output:", output)
    
    print("Press Enter to exit...")
    input()  # Wait for Enter key