#!/usr/bin/python3

import tempfile
import os
from shutil import copyfile
import subprocess
from pexpect import fdpexpect
import sys
import signal

tempdir = tempfile.TemporaryDirectory()
cwd = os.getcwd()
os.chdir(tempdir.name)

copyfile(os.path.join(cwd, 'micropython/firmware.hex'),
        os.path.join(tempdir.name, 'insns.hex'))

cmd = [ os.path.join(cwd, 'chiselwatt') ]

devNull = open(os.devnull, 'w')
p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
        stdin=subprocess.PIPE, stderr=subprocess.PIPE)

exp = fdpexpect.fdspawn(p.stdout)
exp.logfile = sys.stdout.buffer

exp.expect('Type "help\(\)" for more information.')
exp.expect('>>>')

p.stdin.write(b'n2=0\r\n')
p.stdin.write(b'n1=1\r\n')
p.stdin.write(b'for i in range(30):\r\n')
p.stdin.write(b'    n0 = n1 + n2\r\n')
p.stdin.write(b'    print(n0)\r\n')
p.stdin.write(b'    n2 = n1\r\n')
p.stdin.write(b'    n1 = n0\r\n')
p.stdin.write(b'\r\n')
p.stdin.flush()

exp.expect('n1 = n0', timeout=60)
n2 = 0
n1 = 1
for i in range(30):
    n0 = n1 + n2
    exp.expect("%s" % n0, timeout=60)
    n2 = n1
    n1 = n0

os.kill(p.pid, signal.SIGKILL)
