/**
 * Copyright (c) 2019, WSO2 Inc. (http://www.wso2.org)  Apache License, Version 2.0  http://www.apache.org/licenses/LICENSE-2.0
 */
define(['require', 'jquery', 'lodash', './modal-dialog', 'log'], function (require, $, _, ModalDialog, log) {

    var NewItemDialog = function (options) {
        _.set(options, 'class', 'create-new-item-wizard');
        ModalDialog.call(this, options);
        this._serviceClient = _.get(options, 'application.workspaceManager').getServiceClient();
    };

    NewItemDialog.prototype = Object.create(ModalDialog.prototype);
    NewItemDialog.prototype.constructor = NewItemDialog;

    NewItemDialog.prototype.onSubmit = function (data, itemName) {
        var app = this._options.application,
            path = data.path + app.getPathSeperator() + itemName,
            existsResponse = this._serviceClient.exists(path);
        if (existsResponse.exists) {
            this.showError(itemName + " already exists at " + data.path);
        } else {
            this.clearError();
            var response = this._serviceClient.create(path, data.type);
            if (response.error) {
                this.showError(response.message);
            } else {
                this.hide();
                var successCallBack = _.get(data, 'onSuccess');
                if (_.isFunction(successCallBack)) {
                    successCallBack.call();
                }
                log.debug('file' + path + " created successfully");
                if (!_.isEqual('folder', data.type)) {
                    var file = this._serviceClient.readFile(path);
                    app.commandManager.dispatch("create-new-tab", {tabOptions: {file: file}});
                }
            }
        }
    };

    NewItemDialog.prototype.displayWizard = function (data) {
        this.setTitle("new " + data.type);
        this.setSubmitBtnText("create");
        var body = this.getBody();
        body.empty();
        this.getSubmitBtn().unbind('click');
        this.clearError();
        var modalBody = $("<hr class='file-dialog-hr'>" +
            "<div class='container-fluid'>" +
            "<form class='form-horizontal' onsubmit='return false'>" +
            "<div class='form-group'>" +
            "<label for='item-name' class='col-sm-2 file-dialog-form-label'>Enter Name</label>" +
            "<div class='file-dialog-input-field'>" +
            "<input type='text' id='item-name' class='file-dialog-form-control item-name' placeholder='name'>" +
            "</div>" +
            "</div>" +
            "</form>" +
            "</div>");
        body.append(modalBody);
        this.show();
        var self = this,
            input = modalBody.find('input');

        this.on('loaded', function () {
            input.focus();
        });

        this.getSubmitBtn().click(function (e) {
            self.onSubmit(data, input.val());
        });
        input.keyup(function (e) {
            if (e.keyCode == 13) {
                self.onSubmit(data, input.val());
            } else {
                self.clearError();
            }
        });
    };


    return NewItemDialog;
});