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

import { ProgramContext } from '../diverse/ProgramContext';
import { Enhetsklient } from '../klient/Enhetsklient';
import { ledetekst } from '../diverse/Ledetekst';
import { Sokefelt } from './Sokefelt';
import { Gyldighet } from './Gyldighet';

class Enhetsvelger extends Component {
	_mottaSok(sok, loggklient, visFeil) {
		const trimma = (sok || '').trim();
		const orgnr = trimma.replace(/\s+/g, '');
		return (orgnr.match(/^\d{9}$/)
			? this.props.klient.hentEnhetMedOrganisasjonsnummer(orgnr)
			: this.props.klient.hentEnheterHvorNavnInneholder(trimma)
		).catch((feil) => {
			loggklient.error(feil);
			visFeil(
				ledetekst.getTekst(
					'arbeidsvarsling.frontendkomponenter.Enhetsvelger.feil'
				)
			);
			throw feil;
		});
	}
	render() {
		return (
			<ProgramContext.Consumer>
				{({ loggklient, visFeil }) => (
					<Sokefelt
						gyldighet={this.props.gyldighet}
						irettesettelse={this.props.irettesettelse}
						laster={() => this.props.klient.laster()}
						konverterTreff
						konverter={this.props.konverter}
						tittel={this.props.tittel}
						verdi={this.props.verdi}
						vedSok={(sok) =>
							this._mottaSok(sok, loggklient, visFeil)
						}
						vedVerdi={this.props.vedVerdi}
						skalMaskeres
					/>
				)}
			</ProgramContext.Consumer>
		);
	}
}

Enhetsvelger.propTypes = {
	klient: PropTypes.instanceOf(Enhetsklient).isRequired,
	konverter: PropTypes.func,
	gyldighet: PropTypes.instanceOf(Gyldighet),
	irettesettelse: PropTypes.string,
	verdi: PropTypes.func.isRequired,
	vedVerdi: PropTypes.func.isRequired,
};

export { Enhetsvelger };
