#!/usr/bin/env python3

import argparse
import subprocess
import sys

old_names = {
    "ace": " ",
    "gal": "<",
    "pel": "(",
    "bar": "|",
    "gap": "\n",
    "gap": "\t",
    "gap": "  ",
    "per": ")",
    "bas": "\\",
    "gar": ">",
    "sel": "[",
    "buc": "$",
    "hax": "#",
    "sem": ";",
    "cab": "_",
    "hep": "-",
    "ser": "]",
    "cen": "%",
    "kel": "{",
    "soq": "'",
    "col": ":",
    "ker": "}",
    "tar": "*",
    "com": ",",
    "ket": "^",
    "tec": "`",
    "doq": "\"",
    "lus": "+",
    "tis": "=",
    "dot": ".",
    "pam": "&",
    "wut": "?",
    "fas": "/",
    "pat": "@",
    "sig": "~",
    "zap": "!",
}

old_syms = {v: k for k, v in old_names.items()}

new_names = {
  'ace': ' ',
  'ban': '>',
  'bar': '|',
  'bat': '\\',
  'bus': '$',
  'cab': '_',
  'cen': '%',
  'col': ':',
  'com': ',',
  'dot': '.',
  'gap': '\n',
  'gap': '  ',
  'gap': '\t',
  'hax': '#',
  'hep': '-',
  'ket': '^',
  'lac': '[',
  'led': '<',
  'lit': '(',
  'lob': '{',
  'lus': '+',
  'mic': ';',
  'net': '/',
  'pad': '&',
  'pat': '@',
  'rac': ']',
  'rit': ')',
  'rob': '}',
  'say': '\'',
  'sig': '~',
  'tar': '*',
  'tec': '\`',
  'tis': '=',
  'wut': '?',
  'yel': '"',
  'zap': '!',
  }

# reverse the above key/vals
new_syms = {v: k for k, v in new_names.items()}

if sys.platform != 'darwin':
    print("sorry, only works on mac")
    sys.exit(1)

def translate(table, string):
    words = []
    for i, c in enumerate(string):
        if c == ' ' and string[i+1] == ' ':
            # we're looking at two spaces, a gap
            words.append('gap')
            continue
        elif c == ' ' and string[i-1] == ' ':
            # we just saw a gap, keep going
            pass
        elif c in table:
            words.append(table[c])
        else:
            words.append(c)
    return ' '.join(words)



parser = argparse.ArgumentParser()
parser.add_argument('-t', '--table', default='new',
        help="table of symbols to use, either 'old' or 'new'")
parser.add_argument('-f', '--file', help="file to read", default=None)
parser.add_argument('-c', '--code', default=None,
    help='string of hoon code in lieu of --file')

args = parser.parse_args()

if args.table == 'old':
    selected_table = old_syms
else:
    selected_table = new_syms

if args.code is None:
    with open(args.file) as f:
        content = f.read()
        words = translate(selected_table, content)
        subprocess.run(["say", words])
else:
    words = translate(selected_table, args.code)
    subprocess.run(["say", words])