#!/usr/bin/env python3
#
# Copyright (c) 2020, Grigoriy Kramarenko
# All rights reserved.
# This file is distributed under the same license as the current project.
#
"""
Модуль для запуска с эмуляцией AGI Asterisk.
"""
import sys
from argparse import ArgumentParser
from gettext import gettext as _
from threading import Thread

from astersay.app import App
from astersay.dummy import DummyAsterisk
from astersay.conf import DEFAULT_WORK_DIR


def interactive(server, app):
    """Многократный запуск в интерактивном режиме."""
    for name, value in app.agi.params.items():
        print('%s: %s' % (name, value))
    # Предварительно запускаем запись голоса с микрофона.
    server.start_record_audio()
    app.stream = server.stream
    print(_('\nИНТЕРАКТИВНЫЙ РЕЖИМ.'))
    print(_('Модель начата.'))
    app.start()
    print(_('Модель завершена.'))
    while True:
        if app.is_stopped:
            break
        print(_('Запустить модель повторно? (да|нет): '), end='')
        try:
            line = input().lower()
        except KeyboardInterrupt:
            app.stop()
            break
        if line in ('yes', _('да').lower()):
            print(_('Модель начата.'))
            app.start()
            print(_('Модель завершена.'))
        elif line in ('no', _('нет').lower()):
            app.stop()
            break
    print(_('ИНТЕРАКТИВНЫЙ РЕЖИМ ОКОНЧЕН.\n'))
    server.stop()


def run(**kwargs):
    server = DummyAsterisk(agi_request=__file__, **kwargs)
    t = Thread(target=server.start, daemon=True)
    t.start()
    app = App(
        stdin=server.stdout,
        stdout=server.stdin,
        stderr=sys.stdout)
    interactive(server, app)
    sys.exit()


if __name__ == "__main__":
    parser = ArgumentParser(description=_(
        'Запуск CGI-программы AsterSay для отладки диалогов без подключения '
        'к Asterisk.'))
    parser.add_argument('-m', '--model', default='', help=_(
        'Путь к файлу модели диалога. Первый аргумент в AGI.'))
    parser.add_argument('-w', '--workdir', default=DEFAULT_WORK_DIR, help=_(
        'Путь к рабочему каталогу. Второй аргумент в AGI.'))
    args = parser.parse_args()
    run(**vars(args))
