import React from 'react';
import withStyles from "@material-ui/core/styles/withStyles";
import { styles } from './styles';
import Grid from '@material-ui/core/Grid';
import Paper from '@material-ui/core/Paper';
import Typography from '@material-ui/core/Typography';
import TextField from '@material-ui/core/TextField';
import Visibility from '@material-ui/icons/Visibility';
import VisibilityOff from '@material-ui/icons/VisibilityOff';
import Button from '@material-ui/core/Button';
import Hidden from '@material-ui/core/Hidden';
import InputAdornment from '@material-ui/core/InputAdornment';
import IconButton from '@material-ui/core/IconButton';
import CircularProgress from '@material-ui/core/CircularProgress';
import Snackbar from '@material-ui/core/Snackbar';

import { Link } from 'react-router-dom'
import { inject, observer } from "mobx-react";
import schema from 'async-validator'
import { startCase } from 'lodash';
import { Upload, Icon, message } from 'antd';

import AutoComplete from './../../components/AutoComplete';
import {appConfig} from "../../config/app";
import {LINKS} from "../../routes";

// const province = require("./../../../../assets/data/province.json");
// const city = require("./../../../../assets/data/city.json");
// const district = require("./../../../../assets/data/district.json");
// const subdistrict = require("./../../../../assets/data/subdistrict.json");

@withStyles(styles)
@inject('appstate')
@observer
export class ResendOtp extends React.Component {
    state = {
        showPassword: false,
        showConfirmPassword: false,
        openDialog: false,
        isLoading: false,

        fileList_ktp: [],
        fileList_photo: [],

        query: {},

        // form
        confirmPassword: "",
        phone_number: "",
        email: "",
        password: "",
        full_name: "",
        no_ktp: '',
        upload_ktp: '',
        upload_photo: '',
        address: '',
        province: '',
        city: '',
        district: '',
        sub_district: '',
        zip_code: '',
    };

    constructor(props) {
        super(props);
        this.authStore = props.appstate.auth;
        this.http = props.appstate.http;
        this.place = props.appstate.places;
    }

    componentDidMount() {
      let {location:{search}} = this.props;
      search = search.substr(1);

      const query = search.split("&")
        .map(q => q.split('='))
        .reduce((all, q) => {
          all[q[0]] = q[1];
          return all;
        }, {});

      this.setState({query});

      this.place.getAllProvince();
    }

    onChangeProvince = (value) => {
      this.setState({
        province: value
      });
      this.place.getCitiesByProvince(value);
    };

    onChangeCity = (value) => {
      this.setState({
        city: value
      });
      this.place.getDistrictByCity(value);
    };

    onChangeDistrict = (value) => {
      this.setState({
        district: value
      });
      this.place.getSubdistrictByDistrict(value);
    };

    onChangeSubdistrict = (value) => {
      this.setState({
        subdistrict: value
      });
    };

    handleChange = name => event => {
        this.setState({
            [name]: event.target.value,
        });
    };

    viewPassword = () => {
        this.setState({
            showPassword: !this.state.showPassword
        })
    };

    viewConfirmPassword = () => {
        this.setState({
            showConfirmPassword: !this.state.showConfirmPassword
        })
    };

    resendOtp = () => {
      return this.props.appstate.http.post('authentication/resend_otp', {
        phone_number: this.state.phone_number
      }).then(res => {
            //message.success("Please check your email to confirm your account");this.props.history.push(LINKS.LOGIN);
            setTimeout(() => {
                this.setState({ isLoading: false });

              this.props.history.push({
                pathname:LINKS.OTP,
                search:'?login_request_id='+res.login_request_id+'&expired_at='+res.expired_at
              });
            //     this.props.history.push(LINKS.LOGIN);
            }, 250);
        }).catch(err => {
            if (err.type === 'BodyValidationError') {
              message.error(err.detail[0].message);
            } else {
              message.error(err.message);
            }
        });
    };

    handleChangeUploadKtp = (info) => {
        if (info.file.status === 'uploading') {
            this.setState({ loading: true });
            return;
        }
        if (info.file.status === 'done') {
            // Get this url from response in real world.
            getBase64(info.file.originFileObj, imageUrl => this.setState({
                upload_ktp,
                loading: false,
            }));
        }
    };

    handleChangeUploadPhoto = (info) => {
        if (info.file.status === 'uploading') {
            this.setState({ loading: true });
            return;
        }
        if (info.file.status === 'done') {
            // Get this url from response in real world.
            getBase64(info.file.originFileObj, imageUrl => this.setState({
                upload_photo,
                loading: false,
            }));
        }
    };

    uploadOnChange = (key, info) => {
        let fileList = info.fileList;

        this.setState({
          [`fileList_${key}`]: fileList
        })
    };

    createUploadProps = (key) => {
      return {
        name: 'file',
        multiple: false,
        action: appConfig.apiUrl + 'upload',
        customRequest: ({file, onProgress, onSuccess}) => {
          this.setState({
            uploading: true
          });
          this.http.upload(file)
            .then(res => {
              this.setState({
                [`upload_${key}`]: appConfig.apiUrl + res.path.slice(1,res.path.length)
              });
              return res;
            })
            .then(res => {
              message.success(`${file.name} file uploaded successfully.`);

              const fileList = this.state[`fileList_${key}`];

              console.log(key, fileList, this.state);

              const selectedIndex = fileList.findIndex(f => f.name === file.name);

              fileList[selectedIndex].status = "done";
              fileList[selectedIndex].path = res.path;
              onSuccess(fileList[selectedIndex]);
              // form.setFieldsValue({path: res.path});

              this.setState({
                uploading: false,
                // fileList: []
                [`fileList_${key}`]: [fileList[selectedIndex]]
              });
            });

          return {
            abort: () => {}
          }
        },
        fileList: this.state[`fileList_${key}`],
        onChange: (info) => this.uploadOnChange(key, info),
        onRemove: file => true
      };
    };

    render() {
        const { classes } = this.props;

        const uploadButtonKtp = (
            <div>
                <Icon type={this.state.loading ? 'loading' : 'plus'} />
                <div className="ant-upload-text">Upload KTP</div>
            </div>
        );

        const uploadButtonPhoto = (
            <div>
                <Icon type={this.state.loading ? 'loading' : 'plus'} />
                <div className="ant-upload-text">Upload Photo</div>
            </div>
        );

        const upload_ktp = this.state.upload_ktp;
        const upload_photo = this.state.upload_photo;

        return (
            <div className={classes.container}>
                {/*<AlertSuccess open={appStore.global_ui.openSuccess} onClose={()=>appStore.global_ui.closeAlertSuccess()}/>*/}

                <Grid container spacing={0} className={classes.gridContainer}>
                    <Grid item cols={12} className={classes.logoContainer}>
                        <img src={require('../../../../assets/images/logo_new.png')} className={classes.logo} />
                    </Grid>
                    <Grid item xs={12} sm={12} md={10} lg={10} className={classes.registerContainer} style={{
                      alignSelf: 'center'
                    }}>
                        <Grid container spacing={24} className={classes.registerPaper}>
                            <Hidden smDown>
                                <Grid item xs={5}>
                                    <img src={require('../../../../assets/images/register_image_2.png')} width={"80%"} />
                                    <Typography style={{ color: '#FFF' }} variant={"h6"}>
                                        Tukarkan point!
                                    </Typography>
                                    <Typography style={{ color: '#FFF' }} variant={"subtitle2"}>
                                        Dapatkan promo dan keuntungan dengan BTN
                                    </Typography>
                                </Grid>
                            </Hidden>
                            <Grid item xs={12} sm={12} md={7} style={{ paddingLeft: 50, paddingRight: 50 }}>
                                <Paper className={classes.formRegister}>
                                    <Typography variant="h6" gutterBottom>
                                        Daftar Sekarang
                                    </Typography>
                                    {/*<Typography variant="subtitle2" gutterBottom>*/}
                                        {/*Already have an account? <Link to={"/login"} replace>Back to Login</Link>*/}
                                    {/*</Typography>*/}
                                    <div style={{
                                        display: 'flex',
                                        flexDirection: 'row'
                                    }}>
                                            <Grid item xs={12} sm={12} md={12} style={{ paddingLeft: 5, paddingRight: 5 }}>
                                                <TextField
                                                    id="phone"
                                                    label="Nomer Telfon"
                                                    value={this.state.phone_number}
                                                    onChange={this.handleChange('phone_number')}
                                                    margin="normal"
                                                    type={"number"}
                                                    variant="outlined"
                                                    fullWidth
                                                />
                                            </Grid>

                                    </div>



                                    <div style={{ padding: 5, marginTop: 20 }}>
                                        <Button
                                          fullWidth
                                          variant="contained" style={{ backgroundColor: '#ffeb3b' }} onClick={this.resendOtp}>
                                            {this.state.isLoading ? <CircularProgress className={classes.progress} /> : "Kirim ulang OTP"}
                                        </Button>
                                    </div>
                                </Paper>
                            </Grid>
                        </Grid>
                    </Grid>
                </Grid>
            </div>
        )
    }
}

