import type { FC } from 'react';
import { useState } from 'react';
import React from 'react';
import { Section } from '@theorchard/suite-components';
import { CurrentValidationProvider } from 'src/components/currentValidationProvider/currentValidationProvider';
import ProductTracks from 'src/pages/productModal/components/productTracks/productTracks';
import ContributorsBlock from '../contributors';
import LocalizationsBlock from '../localizations';
import ProductBasicsBlock from '../productBasicsBlock';
import ProductNoteBlock from '../productNoteBlock/productNoteBlock';
import ProductValidationBlock from '../productValidationBlock';
import ProductViewDeliveryRestrictions from '../productViewDeliveryRestrictions';
import ProductViewFingerprintingRestrictions from '../productViewFingerprintingRestrictions/productViewFingerprintingRestrictions';
import SchedulingAndPricing from '../schedulingAndPricing';
import type { Product } from 'src/data/queries/product/types';
import type { MergedProduct } from 'src/product/product';
import type { SubmissionType, Validation } from 'src/types';

const PARENT_CLASS_NAME = 'ProductPage';
export const CLASS_NAME = `${PARENT_CLASS_NAME}Body`;

export interface Props {
    product: Product;
    mergedProduct: MergedProduct;
    isMergedProductFullyLoaded: boolean;
    validations?: Validation[];
    reviewQueueId: number;
    submissionType?: SubmissionType;
}

const ProductModalBody: FC<Props> = ({
    product,
    mergedProduct,
    isMergedProductFullyLoaded,
    validations,
    reviewQueueId,
    submissionType,
}) => {
    const [fingerprintRulesUpdatedNum, setFingerprintRulesUpdatedNum] =
        useState(0);

    const pageContainerClassName = 'page-container';

    return (
        <Section testId={CLASS_NAME} className={CLASS_NAME}>
            <CurrentValidationProvider>
                <Section.Body className={pageContainerClassName}>
                    <ProductNoteBlock
                        reviewQueueId={reviewQueueId}
                        product={mergedProduct}
                    />
                    <ProductValidationBlock
                        validations={validations}
                        product={mergedProduct}
                    />
                    <ProductBasicsBlock product={mergedProduct} />
                    <ProductTracks
                        product={product}
                        mergedProduct={mergedProduct}
                        isMergedProductFullyLoaded={isMergedProductFullyLoaded}
                    />
                    <ContributorsBlock product={mergedProduct} />
                    <LocalizationsBlock product={mergedProduct} />
                    <SchedulingAndPricing
                        product={product}
                        mergedProduct={mergedProduct}
                    />
                    <ProductViewDeliveryRestrictions
                        product={product}
                        submissionType={submissionType}
                        onFingerprintRulesUpdated={
                            setFingerprintRulesUpdatedNum
                        }
                    />
                    <ProductViewFingerprintingRestrictions
                        product={product}
                        rulesUpdatedNum={fingerprintRulesUpdatedNum}
                    />
                </Section.Body>
            </CurrentValidationProvider>
        </Section>
    );
};

export default ProductModalBody;
