import React, { Component } from "react";
import Form from 'react-bootstrap/Form';
import Nav from 'react-bootstrap/Nav';

import { connect } from "react-redux";
import { LinkContainer } from "react-router-bootstrap";
import { bindActionCreators } from "redux";
import * as userManagementActions from "../actions/UserManagementActions";

const mapStateToProps = state => {
    return state;
}

class CreateNewUserForm extends Component {

    constructor(props) {
        super(props);
        this.state = {
            userID: '',
            firstName: '',
            lastName: '',
            password: '',
            isAdministrator: false
        }
        this.handleSubmit = this.handleSubmit.bind(this);
        this.handleChange = this.handleChange.bind(this);
    }

    handleChange(e) {
        const { name, value } = e.target;
        if (name === 'isAdministrator') {
            if (e.target.checked) {
                this.setState({ [name]: true })
            } else {
                this.setState({ [name]: false })
            }
        } else {
            this.setState({ [name]: value })
        }
        console.log(JSON.stringify(this.state))
    }

    handleSubmit(e) {
        e.preventDefault();
        const { createNewUserAction } = this.props;
        createNewUserAction(this.state, this.props.accessToken)
        console.log("user sollte angelegt werden")
    }

    render() {
        return (
            <div id="UserManagementPageCreateUserButton" style={{ display: 'flex', justifyContent: 'center', textAlign: 'left' }}>
                <Form style={{ width: '60rem' }}>
                    <Form.Group className="mb-3">
                        <Form.Label>User-ID</Form.Label>
                        <Form.Control id="CreateUserComponentEditUserID" name='userID' type="text" placeholder="Bitte User-ID eingeben" onChange={this.handleChange} required />
                        <Form.Text className="text-muted">
                            Die User-ID kann im Nachhinein nicht mehr geƤndert werden.
                        </Form.Text>
                    </Form.Group>

                    <Form.Group className="mb-3">
                        <Form.Label>Vorname</Form.Label>
                        <Form.Control id="CreateUserComponentEditFirstName" name="firstName" type="text" placeholder="Bitte Vornamen eingeben" onChange={this.handleChange} />
                    </Form.Group>

                    <Form.Group className="mb-3">
                        <Form.Label>Nachname</Form.Label>
                        <Form.Control id="CreateUserComponentEditLastName" name="lastName" type="text" placeholder="Bitte Nachnamen eingeben" onChange={this.handleChange} />
                    </Form.Group>

                    <Form.Group className="mb-3">
                        <Form.Label>Passwort</Form.Label>
                        <Form.Control id="CreateUserComponentEditPassword" name="password" type="password" placeholder="Bitte Passwort eingeben" onChange={this.handleChange} required />
                    </Form.Group>

                    <Form.Group className="mb-3">
                        <Form.Check id="CreateUserComponentEditIsAdministrator" name="isAdministrator" type="checkbox" label="Administrator-Rechte" onChange={this.handleChange} />
                    </Form.Group>
                    <LinkContainer id="CreateUserComponentCreateUserButton" to="/userManagement">
                        <Nav.Link id="CreateUserComponentCreateUserButton" >
                            {/* <Button id="CreateUserComponentCreateUserButton" variant="primary" type="submit" onClick={this.handleSubmit}>
                                Anlegen
                            </Button> */}
                            Anlegen
                        </Nav.Link>
                    </LinkContainer>
                </Form>
            </div >
        )
    }
}

const mapDispatchToProps = dispatch => bindActionCreators({
    createNewUserAction: userManagementActions.passNewUser,
    showAllUsers: userManagementActions.displayUsers
}, dispatch)

const ConnectedUserForm = connect(mapStateToProps, mapDispatchToProps)(CreateNewUserForm)
export default ConnectedUserForm