import React, { useState } from 'react';
import { Tabs, Tab, Button } from '@theorchard/suite-components';
import { useFeatureFlag } from '@theorchard/suite-frontend';
import PaymentGroupList from 'src/components/payment-group/payment-group-list';
import PaymentMinimumsForm from 'src/components/payment-minimums/payment-minimums-form';
import PaymentMinimumsListAndEdit from 'src/components/payment-minimums/payment-minimums-list-and-edit';
import ReferenceSapProfitCentersList from 'src/components/reference-sap-profit-centers-list/reference-sap-profit-centers-list';
import RunControllersList from 'src/components/run-controllers-list/run-controllers-list';
import RunControllerList from 'src/components/run-controllers-list/run-controller-list';
import StatementPeriods from 'src/components/statement-periods/statement-periods';
import { USER_FEATURES } from 'src/constants';
import { PageHeader } from '../shared/pageHeader';
import './admin.scss';

export const Admin: React.FC = () => {
    const defaultTab = 'manage-statement-periods';
    const params = new URLSearchParams(window.location.search);
    const selectTab = params.get('selectTab');
    const [tab, setTab] = useState<string>(selectTab || defaultTab);
    const [isRunControllersModalOpen, setIsRunControllersModalOpen] =
        useState<boolean>(false);
    const [isPaymentGroupSidecarOpen, setIsPaymentGroupSidecarOpen] =
        useState<boolean>(false);
    const [isProfitCenterSidecarOpen, setIsProfitCenterSidecarOpen] =
        useState<boolean>(false);

    const isFeatureAdminPagesTsxEnabled = useFeatureFlag(
        USER_FEATURES.ABACUS_ADMIN_PAGES_CONVERT_TO_TSX
    );

    const isFeatureSingleSupplyChainEnabled = useFeatureFlag(
        USER_FEATURES.ABACUS_SINGLE_SUPPLY_CHAIN_COMPANY_CODES
    );

    const renderButton = ({ handler, text }: any) => (
        <Button
            className="ActionButton ml-auto"
            variant="primary"
            data-testid="actionButton"
            onClick={handler}
        >
            {text}
        </Button>
    );

    const renderAction = () => {
        switch (tab) {
            case 'run-controllers':
                return renderButton({
                    handler: () => setIsRunControllersModalOpen(true),
                    text: '+ New Run Controller',
                });
            case 'payment-groups':
                return renderButton({
                    handler: () => setIsPaymentGroupSidecarOpen(true),
                    text: '+ Add Payment Group',
                });
            case 'sap-profit-centers':
                return renderButton({
                    handler: () => setIsProfitCenterSidecarOpen(true),
                    text: '+ Add SAP Profit Center',
                });
            default:
                return null;
        }
    };

    return (
        <div className="AdminDashboardContainer">
            <PageHeader title="Admin" />
            <Tabs
                id="admin-dashboard-tabs"
                activeKey={tab}
                className="AdminDashboardTabs nav-tabs"
                onSelect={(k: any) => setTab(k)}
            >
                <Tab
                    data-testid="manage-statement-periods"
                    eventKey="manage-statement-periods"
                    title="Manage statement periods"
                >
                    <StatementPeriods />
                </Tab>
                <Tab
                    data-testid="payment-groups"
                    eventKey="payment-groups"
                    title="Payment Groups"
                >
                    {renderAction()}
                    <PaymentGroupList
                        setIsSidecarOpen={setIsPaymentGroupSidecarOpen}
                        isSidecarOpen={isPaymentGroupSidecarOpen}
                        isFeatureAdminPagesTsxEnabled={
                            isFeatureAdminPagesTsxEnabled
                        }
                    />
                </Tab>
                <Tab
                    data-testid="payment-minimums"
                    eventKey="payment-minimums"
                    title="Payment method minimums"
                >
                    {isFeatureAdminPagesTsxEnabled ? (
                        <PaymentMinimumsListAndEdit />
                    ) : (
                        <PaymentMinimumsForm />
                    )}
                </Tab>
                <Tab
                    data-testid="run-controllers"
                    eventKey="run-controllers"
                    title="Run controllers"
                >
                    {renderAction()}
                    {isFeatureAdminPagesTsxEnabled ? (
                        <RunControllerList
                            isModalOpen={isRunControllersModalOpen}
                            setIsModalOpen={setIsRunControllersModalOpen}
                        />
                    ) : (
                        <RunControllersList
                            setIsModalOpen={setIsRunControllersModalOpen}
                            isModalOpen={isRunControllersModalOpen}
                        />
                    )}
                </Tab>
                {isFeatureSingleSupplyChainEnabled && (
                    <Tab
                        data-testid="sap-profit-centers"
                        eventKey="sap-profit-centers"
                        title="SAP Profit Centers"
                    >
                        {renderAction()}
                        <ReferenceSapProfitCentersList
                            setIsSidecarOpen={setIsProfitCenterSidecarOpen}
                            isSidecarOpen={isProfitCenterSidecarOpen}
                        />
                    </Tab>
                )}
            </Tabs>
        </div>
    );
};

export default Admin;
