from tornado import gen

from apertium_apy.handlers.base import BaseHandler
from apertium_apy.utils import to_alpha3_code
from apertium_apy.utils.translation import parse_mode_file, translate_pipeline


class PipeDebugHandler(BaseHandler):
    @gen.coroutine
    def get(self):
        to_translate = self.get_argument('q')

        try:
            l1, l2 = map(to_alpha3_code, self.get_argument('langpair').split('|'))
        except ValueError:
            self.send_error(400, explanation='That pair is invalid, use e.g. eng|spa')
            return

        mode_path = self.pairs['%s-%s' % (l1, l2)]
        try:
            _, commands = parse_mode_file(mode_path)
        except Exception:
            self.send_error(500)
            return

        res = yield translate_pipeline(to_translate, commands)
        if self.get_status() != 200:
            self.send_error(self.get_status())
            return

        output, pipeline = res

        self.send_response({
            'responseData': {'output': output, 'pipeline': pipeline},
            'responseDetails': None,
            'responseStatus': 200,
        })
