#include "putty.h"
#include "storage.h"

const unsigned cmdline_tooltype =
    TOOLTYPE_NONNETWORK |
    TOOLTYPE_NO_VERBOSE_OPTION;

void gui_term_process_cmdline(Conf *conf, char *cmdline)
{
    do_defaults(NULL, conf);
    conf_set_str(conf, CONF_remote_cmd, "");

    cmdline = handle_restrict_acl_cmdline_prefix(cmdline);
    if (handle_special_sessionname_cmdline(cmdline, conf) ||
        handle_special_filemapping_cmdline(cmdline, conf))
        return;

    CmdlineArgList *arglist = cmdline_arg_list_from_GetCommandLineW();
    size_t arglistpos = 0;
    while (arglist->args[arglistpos]) {
        CmdlineArg *arg = arglist->args[arglistpos++];
        CmdlineArg *nextarg = arglist->args[arglistpos];
        const char *argstr = cmdline_arg_to_str(arg);
        int retd = cmdline_process_param(arg, nextarg, 1, conf);
        if (retd == -2) {
            cmdline_error("option \"%s\" requires an argument", argstr);
        } else if (retd == 2) {
            arglistpos++;              /* skip next argument */
        } else if (retd == 1) {
            continue;          /* nothing further needs doing */
        } else if (!strcmp(argstr, "-e")) {
            if (nextarg) {
                /* The command to execute is taken to be the unparsed
                 * version of the whole remainder of the command line. */
                char *cmd = cmdline_arg_remainder_utf8(nextarg);
                conf_set_utf8(conf, CONF_remote_cmd, cmd);
                sfree(cmd);
                return;
            } else {
                cmdline_error("option \"%s\" requires an argument", argstr);
            }
        } else if (argstr[0] == '-') {
            cmdline_error("unrecognised option \"%s\"", argstr);
        } else {
            cmdline_error("unexpected non-option argument \"%s\"", argstr);
        }
    }

    cmdline_run_saved(conf);

    conf_set_int(conf, CONF_sharrow_type, SHARROW_BITMAP);
}

const struct BackendVtable *backend_vt_from_conf(Conf *conf)
{
    return &conpty_backend;
}

const wchar_t *get_app_user_model_id(void)
{
    return L"SimonTatham.Pterm";
}

void gui_terminal_ready(HWND hwnd, Seat *seat, Backend *backend)
{
}