import sys

def decrypt_string_table(input_file, output_file):
    # Read the file in binary mode
    with open(input_file, 'rb') as f:
        data = f.read()
    
    # Skip UTF-16LE BOM (first 2 bytes: FF FE)
    if data[:2] == b'\xff\xfe':
        data = data[2:]
    
    # Decode as UTF-16LE
    text = data.decode('utf-16-le')
    
    lines = text.splitlines()
    
    results = []
    
    for line in lines:
        # XOR decrypt each character with key 16
        decrypted = ''.join(chr(ord(c) ^ 16) for c in line)
        
        # Split on tab to get index and content
        tab_pos = decrypted.find('\t')
        if tab_pos != -1:
            index_str = decrypted[:tab_pos]
            content = decrypted[tab_pos + 1:] if tab_pos + 1 < len(decrypted) else ''
        else:
            index_str = decrypted
            content = ''
        
        # Replace literal \n markers with actual newlines
        content = content.replace('\\n', '\n')
        
        results.append((index_str.strip(), content))
    
    # Write human-readable output
    with open(output_file, 'w', encoding='utf-8') as f:
        for index, content in results:
            f.write(f"[{index}] {content}\n")
    
    print(f"Decrypted {len(results)} entries to '{output_file}'")

if __name__ == '__main__':
    if len(sys.argv) < 3:
        print("Usage: python decrypt.py <input_file> <output_file>")
        sys.exit(1)
    
    decrypt_string_table(sys.argv[1], sys.argv[2])