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

import { Feil } from '../diverse/Feil';
import { installasjon } from '../diverse/installasjon';
import { Ramme } from '../pynt/Ramme';
import { Spinner } from '../pynt/Spinner';
import { ledetekst } from '..';

class Dinsideinnlogging extends Component {
	constructor(props) {
		super(props);
		this.state = {
			laster: !this.props.innstillinger.utenNokkelverifisering,
		};
	}
	componentDidMount() {
		if (!this.props.innstillinger.utenNokkelverifisering) {
			this._tvingDinsideinnlogging().catch((feil) =>
				this.props.vedFeil(feil)
			);
		}
	}
	_tvingDinsideinnlogging() {
		if (!navigator.cookieEnabled) {
			return Promise.reject(
				new Feil(
					'Informasjonskapsler må aktiveres for å kunne logge inn.'
				)
			);
		}
		const tilbyder = this.props.innstillinger.statusadresse + '/idporten';
		return fetch(tilbyder + '/status', { credentials: 'include' })
			.then((res) => res.json())
			.then((status) => {
				if (!status.loggedIn) {
					window.location.href =
						tilbyder +
						'/login?returnUrl=' +
						encodeURIComponent(window.location.href);
				}
				this.setState({
					laster: false,
				});
			});
	}
	render() {
		if (this.state.laster) {
			return (
				<Ramme avstand grafarge>
					<Spinner
						aktivert
						tekst={ledetekst.getTekst(
							'arbeidsvarsling.frontendkomponenter.Dinsideinnlogging.laster'
						)}
					/>
				</Ramme>
			);
		}
		return this.props.children;
	}
}

Dinsideinnlogging.propTypes = {
	sid: PropTypes.string.isRequired,
	innstillinger: PropTypes.PropTypes.shape({
		statusadresse: PropTypes.string.isRequired,
		utenNokkelverifisering: PropTypes.bool.isRequired,
	}).isRequired,
	vedFeil: PropTypes.func.isRequired,
};

export { Dinsideinnlogging };
