import React, { Component } from "react";
import {
    Label,
    Form,
    Button,
    FormGroup,
    Input,
    Modal,
    ModalHeader,
    ModalFooter,
    ModalBody,
    Alert,
} from "reactstrap";
import axios from "axios";
export default class login extends Component {
    constructor(props) {
        super(props);
        this.onChangePassword = this.onChangePassword.bind(this);
        this.onChangeUsername = this.onChangeUsername.bind(this);
        this.onChangeEmail = this.onChangeEmail.bind(this);
        this.onSubmit = this.onSubmit.bind(this);
        this.toggleModal = this.toggleModal.bind(this);
        this.toggleError = this.toggleError.bind(this);
        this.addUser = this.addUser.bind(this);
        this.state = {
            username: "",
            password: "",
            email: "",
            alert: false,
            isModalOpen: false,
            errMessage: "",
            alertCol: "danger",
        };
    }
    onChangeUsername(e) {
        this.setState({
            username: e.target.value,
        });
    }
    onChangePassword(e) {
        this.setState({
            password: e.target.value,
        });
    }
    onChangeEmail(e) {
        this.setState({
            email: e.target.value,
        });
    }
    toggleModal() {
        this.setState({
            isModalOpen: !this.state.isModalOpen,
        });
    }
    onSubmit(e) {
        e.preventDefault();
        const user = {
            username: this.state.username,
            password: this.state.password,
        };
        // console.log(this.props)x
        axios
            .post("/api/users/login", user)
            .then((res) => {
                this.props.updateUser(res.data.user).then(() => {
                    window.location = "/";
                });
            })
            .catch((err) => {
                console.log(err.response);
                let errMess = "";
                errMess = err?.response?.data?.err?.name;
                if (errMess === undefined) errMess = "Something went wrong";
                else if (errMess === "IncorrectUsernameError")
                    errMess = "Incorrect Username";
                else if (errMess === "IncorrectPasswordError")
                    errMess = "Incorrect Password";
                this.setState({
                    alert: true,
                    alertCol: "danger",
                    errMessage: errMess,
                });
            });
    }
    addUser(e) {
        e.preventDefault();
        const newUser = {
            username: this.state.username,
            password: this.state.password,
            email: this.state.email,
        };
        axios
            .post("/api/users/", newUser)
            .then(({ data }) => {
                console.log(data);
                this.props.updateUser(data.user).then(() => {
                    window.location = "/";
                });
                this.setState({
                    alert: false,
                });
            })
            .catch((err) => {
                let errMess = "";
                errMess = err?.response?.data?.err?.name;
                if (errMess === undefined) errMess = "Something went wrong";
                else if (errMess === "UserExistsError")
                    errMess = "User Already Exists";
                else if (errMess === "IncorrectPasswordError")
                    errMess = "Incorrect Password";
                this.setState({
                    alert: true,
                    alertCol: "danger",
                    errMessage: errMess,
                });
                this.setState({
                    alert: true,
                    errMessage: errMess,
                    alertCol: "danger",
                });
                console.log(err.response);
            });
        this.toggleModal();
    }
    componentDidMount() {
        if (this.props.user) window.location = "/";
    }
    toggleError() {
        this.setState({
            alert: !this.state.alert,
        });
    }
    render() {
        return (
            <div>
                <div className='p-3 mt-1'>
                    <Alert
                        color={this.state.alertCol}
                        fade={true}
                        toggle={this.toggleError}
                        isOpen={this.state.alert}>
                        {this.state.errMessage}
                    </Alert>
                </div>

                <div id='form' className='p-4 my-4'>
                    <h1 style={{ fontFamily: "Kaushan Script" }}>Login</h1>
                    <Form onSubmit={this.onSubmit}>
                        <div className='form-group'>
                            <Label>Username : </Label>
                            <input
                                type='text'
                                required
                                className='form-control'
                                value={this.state.username}
                                onChange={this.onChangeUsername}
                            />
                        </div>
                        <div className='form-group'>
                            <Label>Password : </Label>
                            <input
                                type='password'
                                required
                                className='form-control'
                                value={this.state.password}
                                onChange={this.onChangePassword}
                            />
                        </div>
                        <div className='form-group'>
                            New to{" "}
                            <span
                                style={{
                                    fontFamily: "Monoton",
                                }}>
                                BlogApp ?
                            </span>{" "}
                            <Button
                                className='btn btn-sm'
                                color='success'
                                onClick={this.toggleModal}>
                                Sign Up
                            </Button>
                        </div>
                        <div className='form-group'>
                            <input
                                type='submit'
                                value='Login'
                                className='btn btn-primary'
                            />
                        </div>
                    </Form>
                </div>
                <Modal
                    isOpen={this.state.isModalOpen}
                    fade={false}
                    toggle={this.toggleModal}>
                    <ModalHeader toggle={this.toggleModal}>
                        Add a blog
                    </ModalHeader>
                    <Form onSubmit={this.addUser}>
                        <ModalBody>
                            <FormGroup>
                                <Label htmlFor='username'>Username</Label>
                                <Input
                                    type='text'
                                    id='username'
                                    onChange={this.onChangeUsername}
                                    name='username'
                                />
                            </FormGroup>
                            <FormGroup>
                                <Label htmlFor='email'>Email</Label>
                                <Input
                                    type='text'
                                    id='email'
                                    onChange={this.onChangeEmail}
                                    name='email'
                                />
                            </FormGroup>
                            <FormGroup>
                                <Label htmlFor='password'>Password</Label>
                                <Input
                                    type='password'
                                    id='password'
                                    onChange={this.onChangePassword}
                                    name='password'
                                />
                            </FormGroup>
                        </ModalBody>
                        <ModalFooter>
                            <Button
                                type='submit'
                                value='submit'
                                color='primary'>
                                Sign Up
                            </Button>
                        </ModalFooter>
                    </Form>
                </Modal>
            </div>
        );
    }
}