# -*- coding: utf-8 -*-
#
# Copyright © Spyder Project Contributors
# Licensed under the terms of the MIT License
# (see spyder/__init__.py for details)

import argparse


def get_options(argv=None):
    """
    Convert options into commands.
    Return commands, message
    """
    parser = argparse.ArgumentParser(usage="spyder [options] files")
    parser.add_argument(
        '--new-instance',
        action='store_true',
        default=False,
        help="Run a new instance of Spyder, even if the single "
             "instance mode has been turned on (default)"
    )
    parser.add_argument(
        '--defaults',
        dest="reset_to_defaults",
        action='store_true',
        default=False,
        help="Reset configuration settings to defaults"
    )
    parser.add_argument(
        '--reset',
        dest="reset_config_files",
        action='store_true',
        default=False,
        help="Remove all configuration files!"
    )
    parser.add_argument(
        '--optimize',
        action='store_true',
        default=False,
        help="Optimize Spyder bytecode (this may require "
             "administrative privileges)"
    )
    parser.add_argument(
        '-w', '--workdir',
        dest="working_directory",
        default=None,
        help="Default working directory"
    )
    parser.add_argument(
        '--hide-console',
        action='store_true',
        default=False,
        help="Hide parent console window (Windows)"
    )
    parser.add_argument(
        '--show-console',
        action='store_true',
        default=False,
        help="(Deprecated) Does nothing, now the default behavior "
             "is to show the console"
    )
    parser.add_argument(
        '--multithread',
        dest="multithreaded",
        action='store_true',
        default=False,
        help="Internal console is executed in another thread "
             "(separate from main application thread)"
    )
    parser.add_argument(
        '--profile',
        action='store_true',
        default=False,
        help="Profile mode (internal test, not related "
             "with Python profiling)"
    )
    parser.add_argument(
        '--window-title',
        type=str,
        default=None,
        help="String to show in the main window title"
    )
    parser.add_argument(
        '-p', '--project',
        default=None,
        type=str,
        dest="project",
        help="Path that contains a Spyder project"
    )
    parser.add_argument(
        '--opengl',
        default=None,
        dest="opengl_implementation",
        choices=['software', 'desktop', 'gles'],
        help="OpenGL implementation to pass to Qt"
    )
    parser.add_argument(
        '--paths',
        action='store_true',
        default=False,
        help="Show all Spyder configuration paths"
    )
    parser.add_argument(
        '--debug-info',
        default=None,
        dest="debug_info",
        choices=['minimal', 'verbose'],
        help=("Level of internal debugging info to give. "
              "'minimal' only logs a small amount of "
              "confirmation messages and 'verbose' logs a "
              "lot of detailed information.")
    )
    parser.add_argument(
        '--debug-output',
        default='terminal',
        dest="debug_output",
        choices=['terminal', 'file'],
        help=("Print internal debugging info to the terminal and a file in "
              "the configuration directory or to the terminal and a file "
              "called spyder-debug.log in the current working directory. "
              "Default is 'terminal'.")
    )
    parser.add_argument(
        '--filter-log',
        default='',
        help="Comma-separated module name hierarchies whose log "
             "messages should be shown. e.g., "
             "spyder.plugins.completion,spyder.plugins.editor"
    )
    parser.add_argument(
        '--safe-mode',
        dest="safe_mode",
        action='store_true',
        default=False,
        help="Start Spyder with a clean configuration directory"
    )
    parser.add_argument(
        '--no-web-widgets',
        dest="no_web_widgets",
        action='store_true',
        default=False,
        help="Disable the usage of web widgets in Spyder (e.g. the Help and "
             "Online help panes)."
    )
    parser.add_argument(
        '--report-segfault',
        dest="report_segfault",
        action='store_true',
        default=False,
        help="Report segmentation fault to Github."
    )
    parser.add_argument(
        '--conf-dir',
        type=str,
        dest="conf_dir",
        default=None,
        help="Choose a configuration directory to use for Spyder."
    )
    parser.add_argument(
        '--connect-to-kernel',
        type=str,
        dest="connection_file",
        default=None,
        help=(
            "Connect to an existing kernel whose info is available in a "
            "kernel-*.json file"
        )
    )

    parser.add_argument('files', nargs='*')
    options = parser.parse_args(argv)
    args = options.files
    return options, args
