import type { FC } from 'react';
import React from 'react';
import { TAB_PARAM_NAME } from '../pageNav';

interface Props {
    currentView?: string;
    props?: object;
    views: Record<string, React.ElementType>;
    defaultView?: string;
    viewParamName?: string;
}

const getCurrentViewKey = (name = TAB_PARAM_NAME) => {
    const params = new URLSearchParams(window.location.search);
    return params.get(name);
};

const PageSwitch: FC<Props> = ({ currentView, views, props = {}, defaultView, viewParamName }) => {
    let Component = views[currentView || (getCurrentViewKey(viewParamName) ?? '')];
    if (!Component && defaultView) Component = views[defaultView];
    else if (!Component) {
        const [first] = Object.values(views);
        Component = first;
    }

    if (!Component) return null;

    return <Component {...props} />;
};

export default PageSwitch;
