import * as React from 'react';
import {
	Component, InputHTMLAttributes,
	SyntheticEvent,
} from 'react';

export interface SubmitInputProps extends InputHTMLAttributes<HTMLInputElement> {
	type?: 'text' | 'number';
	initialValue?: string;
	name: string;
	onSubmitValue: (value: string) => void;
	focus?: boolean;
}

export interface SubmitInputState {
	value: string;
}

export class SubmitInput extends Component<SubmitInputProps, SubmitInputState> {
	state: SubmitInputState = {
		value: '',
	};

	constructor(props: SubmitInputProps) {
		super(props);
		this.state.value = props.initialValue ?? '';
	}

	private onSubmit = (event: SyntheticEvent<any>) => {
		event.preventDefault();
		this.props.onSubmitValue(this.state.value);
	};

	public render(): JSX.Element {
		return <form onSubmit={this.onSubmit}>
			<input value={this.state.value}
				   type={this.props.type}
				   id={`bbb-${this.props.name}`}
				   name={this.props.name}
				   onChange={event => this.setState({value: event.currentTarget.value})}
				   onBlur={() => this.props.onSubmitValue(this.state.value)}
				   autoFocus={this.props.focus}
				   min={this.props.min}
				   max={this.props.max}
				   />
		</form>;
	}
}