#! /usr/bin/env python3
# -*- coding: utf-8 -*-

import argparse
parser = argparse.ArgumentParser(description="Laborejo Command Line Player.")
parser.add_argument("path", help="A Laborejo Score (*.lbjs) file")
parser.add_argument("-j", "--jack", help="Instead of the internal General Midi sample use the jack midi data set and auto-connect all lbjs-saved ports.", action="store_true")
parser.add_argument("-s", "--soundfont", help="Optional Soundfont (*.sf2). Has no effect when used with --jack")
parser.add_argument("-w", "--wait", help="Don't start playback and transport but wait for an external transport signal. Do not reset transport to 0. Default: Start transport from 0.", action="store_true")
parser.add_argument("-k", "--keeprolling", help="At the end of the song keep transporting rolling. Default: Stop transport.", action="store_true")
parser.add_argument("-i", "--introverted", help="Don't auto-connect the saved jack connections. Default: Auto-Connect.", action="store_true")


args = parser.parse_args()

import signal
import laborejocore as api #start the laborejo modile

api.calfboxInit(soundfont = args.soundfont, autoconnect = not args.introverted)

#User can quit the program before it runs out.
def signal_handler(signal, frame):
    """Abort does not listen for transport or command line options.
    It justs stops and quit"""
    api.stop()
signal.signal(signal.SIGTERM, signal_handler)
signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGQUIT, signal_handler)


api.load(args.path)
api.playOnce(jackMode = args.jack, waitForStart = args.wait, keepRolling = args.keeprolling)
print() #new line for the prompt
if args.keeprolling:
    print ("Playback finished. Jack Transport still rolling")
api.calfboxShutdown()
