import React from 'react';
import PropTypes from 'prop-types';
import IdentityContext from '../../context';
import { IdentityManager } from '../../utils';
import type { FeatureFlagDictionary } from '@orchard/frontend-identity';
import type { WorkstationUser } from 'src/types';

interface Props {
    user?: WorkstationUser;
    featureFlags?: FeatureFlagDictionary;
    children?: React.ReactNode;
}

export default class IdentityProviderComponent extends React.PureComponent<Props> {
    static childContextTypes = {
        identity: PropTypes.object,
    };

    getChildContext() {
        const { user, featureFlags } = this.props;

        if (
            !user ||
            !IdentityManager.instance.identity ||
            IdentityManager.instance.identity.id !== user.id
        ) {
            IdentityManager.instance.setFeatureFlags(featureFlags ?? {});
            IdentityManager.instance.setIdentity(user);
        }

        const { identity } = IdentityManager.instance;
        return { identity: identity! };
    }

    render() {
        const { children } = this.props;
        const context = this.getChildContext();

        return (
            <IdentityContext.Provider value={context}>
                {children}
            </IdentityContext.Provider>
        );
    }
}
