#!/usr/bin/env python
# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import argparse
import os
import subprocess
import sys
import urlparse


BUILD_DIRECTORY = 'out'
CONFIG_DIRECTORY = 'Debug'
MOJO_SHELL_PATH = os.path.abspath(os.path.join(__file__, os.pardir, os.pardir,
    os.pardir, BUILD_DIRECTORY, CONFIG_DIRECTORY, 'mojo_shell'))

SUPPORTED_MIME_TYPES = [
    'text/html',
    'text/plain',
]

def start_http_server_for_file(path):
    HTTP_PORT = 9999
    directory = os.path.dirname(os.path.abspath(path))
    server_command = [
        'python',
        '-m',
        'SimpleHTTPServer',
        str(HTTP_PORT)
    ]
    subprocess.Popen(server_command, cwd=directory)
    return 'http://localhost:%s/%s' % (HTTP_PORT, os.path.basename(path))


def main():
    parser = argparse.ArgumentParser(description='Sky launcher/debugger')
    parser.add_argument('--gdb', action='store_true')
    parser.add_argument('url', nargs='?', type=str)
    args = parser.parse_args()

    content_handlers = ['%s,%s' % (mime_type, 'mojo://sky_viewer/')
        for mime_type in SUPPORTED_MIME_TYPES]
    shell_command = [
        MOJO_SHELL_PATH,
        '--v=1',
        '--content-handlers=%s' % ','.join(content_handlers),
        '--url-mappings=mojo:window_manager=mojo:sky_debugger',
        'mojo:window_manager',
    ]
    if args.url:
        url = args.url
        if not urlparse.urlparse(url).scheme:
            url = start_http_server_for_file(url)

        prompt_args = '--args-for=mojo://sky_debugger_prompt/ %s' % url
        shell_command.append(prompt_args)
    if args.gdb:
        shell_command = ['gdb', '--args'] + shell_command

    print ' '.join(shell_command)
    subprocess.check_call(shell_command)


if __name__ == '__main__':
    main()
