import React, {Component} from 'react';
import PropTypes from 'prop-types';

class Countdown extends Component {
    constructor(props) {
        super(props);
        this.state = {
            runCountdown: this.props.runCountdown,
            timer: this.props.time,
        };
        this.interval = null;

        if (this.state.runCountdown) {
            this.startCountdown();
        }
    }

    componentWillReceiveProps(nextProps) {
        this.setState({
            ...nextProps,
        });

        if (nextProps.runCountdown && !this.interval) {
            this.startCountdown();
        } else if (!nextProps.runCountdown && this.interval) {
            this.clearCountdown();
        }
    }

    componentWillUnmount() {
        this.clearCountdown();
    }

    startCountdown() {
        let iteration = 1;

        this.interval = window.setInterval(() => {
            if (iteration === this.props.time) {
                window.clearInterval(this.interval);
                this.interval = null;
                this.props.doneCallback();
            } else {
                this.setState({timer: this.props.time - iteration});
            }
            iteration++;
        }, this.props.interval * 1000);
    }

    clearCountdown() {
        window.clearInterval(this.interval);
        this.interval = null;
    }

    render() {
        if (!this.state.runCountdown) {
            return null;
        }

        return (
            <span>{this.state.timer}</span>
        );
    }
}

Countdown.propTypes = {
    doneCallback: PropTypes.func,
    interval: PropTypes.number,
    runCountdown: PropTypes.bool,
    time: PropTypes.number.isRequired,
};

Countdown.defaultProps = {
    doneCallback: null,
    interval: 1,
    runCountdown: false,
};

export default Countdown;
