import { useState } from 'react';
import { useIdentity, formatMessage } from '@theorchard/suite-frontend';
import { ErrorMessage, PageContext } from '@theorchard/suite-components';
import en from '../locale/default.json';
import BulkSessionsSidecar from 'modules/bulkDigitalAudioSidecar/src/components/bulkSessionsSidecar';
import CreatePage from 'src/pages/createPage/createPage';
import BulkCreatePage from 'modules/bulkDigitalAudio/src/pages/bulkCreatePage';
import GettingStartedPage from 'modules/bulkDigitalAudio/src/pages/gettingStartedPage';
import { isDontShowCookieChecked } from 'modules/bulkDigitalAudio/src/pages/gettingStartedPage/useDontShowCookie';
import { useCcmSpotifyBulkTemplatePopulation } from 'modules/bulkDigitalAudio/src/utils/features';
import { LocalizationManager } from '@theorchard/suite-frontend';
import { useLocation } from 'react-router-dom';
import '../modules/bulkDigitalAudio/src/styles/index';
import '../modules/bulkDigitalAudio/src/styles/workstation.scss';

// The workstation identity extends the base Identity with session-level user data.
// We define the minimal shape here since frontend-content cannot import WorkstationIdentity.
type WorkstationUser = {
    vendor?: { vendorId: number };
    subaccount?: { subaccountId: number };
};

const BulkModuleForWorkstation = () => {
    LocalizationManager.instance.appendTranslations({ en });
    const identity = useIdentity();
    const location = useLocation();
    const isCcmSpotifyBulkTemplatePopulationEnabled =
        useCcmSpotifyBulkTemplatePopulation();
    const [showGettingStarted, setShowGettingStarted] = useState(
        () =>
            isCcmSpotifyBulkTemplatePopulationEnabled &&
            !isDontShowCookieChecked()
    );
    const backRoute =
        (location.state as { backRoute?: string } | undefined)?.backRoute ||
        '/catalog';

    let vendorId = null;
    const subaccountId = (identity as unknown as { user?: WorkstationUser })
        .user?.subaccount?.subaccountId;
    if (!subaccountId)
        vendorId = (identity as unknown as { user?: WorkstationUser }).user
            ?.vendor?.vendorId;

    if (!vendorId && !subaccountId)
        return (
            <div className="bulk-create-page">
                <ErrorMessage
                    className="bulk-create-page"
                    variant="full-page"
                    description={formatMessage('error.vendorError')}
                />
            </div>
        );

    return (
        <PageContext.Provider
            value={{ className: 'WorkstationSuiteComponents' }}
        >
            <CreatePage
                vendorId={vendorId}
                subaccountId={subaccountId}
                forceBackRoute={backRoute}
            >
                <div className="bulkDigitalAudio">
                    {showGettingStarted ? (
                        <GettingStartedPage
                            onNext={() => setShowGettingStarted(false)}
                        />
                    ) : (
                        <BulkCreatePage />
                    )}
                </div>
            </CreatePage>
        </PageContext.Provider>
    );
};

const BulkSessionsSidecarForWorkstation = ({
    onClose,
}: { onClose?: () => void } = {}) => {
    LocalizationManager.instance.appendTranslations({ en });
    return <BulkSessionsSidecar onClose={onClose} />;
};

export { BulkSessionsSidecarForWorkstation as BulkSessionsSidecar };
export default BulkModuleForWorkstation;
