var React          = require('react');
var TextInput      = require('../form/TextInput');

var StrategyForm = React.createClass({

    getDefaultProps: function() {
        return {
            maxParams: 4
        };
    },

    getInitialState: function() {
        return {
            parameters: []
        };
    },

    onSubmit: function(event) {
        event.preventDefault();

        var strategy = {};
        strategy.name = this.refs.name.getValue();
        strategy.description = this.refs.description.getValue();
        strategy.parametersTemplate = {};

        var that = this;

        this.state.parameters.forEach(function(parameter) {
           var name = that.refs[parameter.name].getDOMNode().value.trim();
            if(name) {
                strategy.parametersTemplate[name] = "string";
            }
        });

        this.props.onSave(strategy);
    },

    onCancel: function(event) {
        event.preventDefault();

        this.props.onCancelNewStrategy();
    },

    onAddParam: function(event) {
        event.preventDefault();
        var id = this.state.parameters.length + 1;
        var params = this.state.parameters.concat([{id:id, name: "param_" + id, label: "Parameter " +id}]);
        this.setState({parameters: params});
    },

    onRemoveParam: function(event) {
        event.preventDefault();
        var id = this.state.parameters.length + 1;
        var params = this.state.parameters.slice(0, -1);

        this.setState({parameters: params});
    },

    render: function() {
        return (
            <div className="line r-pam bg-lilac-xlt">
                <div className="unit r-size1of2">
                    <form onSubmit={this.onSubmit}>
                        <fieldset>
                            <legend>Create strategy</legend>

                            <TextInput
                                id="name"
                                name="name"
                                label="Name"
                                ref="name"
                                placeholder="Strategy name" />

                            <TextInput
                                id="description"
                                name="description"
                                label="Description"
                                ref="description"
                                placeholder="Please write a short description" />

                            {this.renderParameters()}
                            {this.renderRemoveLink()}

                            <div className="actions">
                                <input type="submit" value="Save" className="primary mrs" />
                                <button onClick={this.onCancel} className="mrs">Cancel</button>
                                {this.renderAddLink()}
                            </div>
                        </fieldset>
                    </form>
                </div>
            </div>
        );
    },

    renderParameters: function() {
        return this.state.parameters.map(function(param) {
            return (
                <div className="formelement" key={param.name}>
                    <label className="t4">{param.label}</label>
                    <div className="input">
                        <div className="line">

                            <div className="unit size2of3">
                                <input
                                    type="text"
                                    name={param.name}
                                    ref={param.name}
                                    placeholder="Parameter name"
                                />
                            </div>

                            <div className="unit size1of3">
                                <select defaultValue="string">
                                    <option value="string">string</option>
                                </select>
                            </div>
                        </div>
                    </div>
                </div>
                )
        });
    },

    renderAddLink: function() {
        if(this.state.parameters.length < this.props.maxParams) {
            return <a href="#add" onClick={this.onAddParam}>+ Add required parameter</a>;
        }
    },
    renderRemoveLink: function() {
        if(this.state.parameters.length > 0) {
            return (
                <div className="formelement mtn">
                    <a href="#add" className="negative" onClick={this.onRemoveParam}>- Remove parameter</a>
                </div>
                );
        }
    }
});

module.exports = StrategyForm;