import React, { useEffect } from 'react';
import { Switch, Route, Redirect, withRouter, RouteComponentProps } from 'react-router-dom';
import Segment from 'src/utils/segment';
import useIdentity from 'src/utils/use-identity';
import withPaymentsActivated from 'src/utils/with-payments-activated';
import IndexPage from 'src/pages/index-page/index-page';
import SplitsSetupPage from 'src/pages/splits-setup-page/splits-setup-page';
import IneligibleProductErrorPage from 'src/pages/ineligible-product-error-page/ineligible-product-error-page';
import CollaboratorPage, { RouterProps as CollaboratorPageRouterProps } from 'src/pages/collaborator-page/collaborator-page';
import RecipientPage from 'src/pages/recipient-page/recipient-page';
import PaymentsPage from 'src/pages/payments-page/payments-page';
import TransferPage from 'src/pages/transfer-page/transfer-page';
import ManageReportsPage from 'src/pages/manage-reports-page/manage-reports-page';
import ManageSplitsPage from 'src/pages/manage-splits-page/manage-splits-page';
import {
    COLLABORATOR_MANAGEMENT_PAGE_TAB_REPORTING,
    COLLABORATOR_MANAGEMENT_PAGE_TAB_PRODUCTS,
    COLLABORATOR_MANAGEMENT_PAGE_TAB_ROYALTIES,
    USER_FEATURES
} from 'src/constants';

export const Routes: React.FC<RouteComponentProps> = ({ history }) => {
    useEffect(() => {
        Segment.trackPage();
    }, [history.location.pathname]);

    const identity = useIdentity();

    return (
        <Switch>
            { identity.hasFeatureFlag(USER_FEATURES.COLLABORATOR_SPLIT_TABLE) && (
                <Route
                    exact
                    path="/accounting/collaborators/splits"
                    component={ ManageSplitsPage }
                />
            ) }
            <Route
                exact
                path="/accounting/collaborators/view/:productId"
                component={ SplitsSetupPage }
            />
            <Route
                exact
                path="/accounting/collaborators/view/:productId/track/:tuid"
                component={ SplitsSetupPage }
            />
            <Redirect
                exact
                from="/accounting/collaborators/collaborator/:collaboratorId"
                to="/accounting/collaborators/collaborator/:collaboratorId/royalties"
            />
            <Route
                path="/accounting/collaborators/collaborator/:collaboratorId/reporting"
                render={ (props) => (
                    <CollaboratorPage
                        { ...props as CollaboratorPageRouterProps }
                        activeTab={ COLLABORATOR_MANAGEMENT_PAGE_TAB_REPORTING }
                    />
                ) }
            />
            <Route
                path="/accounting/collaborators/collaborator/:collaboratorId/products"
                render={ (props) => (
                    <CollaboratorPage
                        { ...props as CollaboratorPageRouterProps }
                        activeTab={ COLLABORATOR_MANAGEMENT_PAGE_TAB_PRODUCTS }
                    />
                ) }
            />
            <Route
                path="/accounting/collaborators/collaborator/:collaboratorId/royalties"
                render={ (props) => (
                    <CollaboratorPage
                        { ...props as CollaboratorPageRouterProps }
                        activeTab={ COLLABORATOR_MANAGEMENT_PAGE_TAB_ROYALTIES }
                    />
                ) }
            />
            <Route
                exact
                path="/accounting/collaborators/collaborator/:collaboratorId/payment"
                component={ withPaymentsActivated(RecipientPage) }
            />
            <Route
                exact
                path="/accounting/collaborators/payments"
                component={ withPaymentsActivated(PaymentsPage) }
            />
            <Route
                exact
                path="/accounting/collaborators/payments/transfer/:batchId"
                component={ withPaymentsActivated(TransferPage) }
            />
            <Route
                exact
                path="/accounting/collaborators/reports"
                component={ ManageReportsPage }
            />
            <Route exact path="/accounting/collaborators/error" component={ IneligibleProductErrorPage } />
            <Route exact path="/accounting/collaborators" component={ IndexPage } />
            <Redirect to="/accounting/collaborators" />
        </Switch>
    );
};

export default withRouter(Routes);
