import type { Dispatch, StateUpdater } from 'preact/hooks';
import type { BusinessLinesResponse } from '../../../../api/businessLines/businessLines.types';
import type { CreateBusinessLine } from '../../../../api/businessLines/useCreateBusinessLine';
import type { UpdateBusinessLine } from '../../../../api/businessLines/useUpdateBusinessLines';
import type { CreateLegalEntity } from '../../../../api/createLegalEntity/useCreateLegalEntity';
import type { UpdateLegalEntity } from '../../../../api/legalEntity/useUpdateLegalEntity';
import type { LoadingStatus } from '../../../ui/atoms/LoaderWrapper/constants';
import type { FeatureName } from '../../../../context/ToggleContext/types';
import type { ExistingLegalEntity } from '../../../../core/models/api/legal-entity';
import type { UserEvents } from '../../../../core/user-events';
import type { TFunction } from '../../../../../types';
import type { Scenario } from '../../../../core/models/api/get-scenarios';
import type { ToastOptions } from '../../../ui/molecules/Toast/Toast.types';
import type { TaskType } from '../../../../stores/globalStore/taskTypes';
import type { AccountHolderOption } from '../../../../types/accountHolder';
import type { CountryCode } from '../../../../types/datasets/country-code';
import type { EntityProblems } from '../../../../types/errors/entity-problems';
import type { FormModelWithValidity } from '../../../../types/form';
import type { DocumentApiUtils } from '../../../../utils/api/documentUtils';
import type { DropinProps } from '../../../EmbeddedDropins/OnboardingDropinComponent/DropinComposer/types';
import type { TrustMember } from '../../../Trust/tasks/TrustMembers/types';
import type { UnincorporatedPartnershipMember } from '../../../UnincorporatedPartnership/tasks/UnincorporatedPartnershipMembers/types';
import type { BusinessDetailsSchema } from '../../forms/BusinessDetails/types';
export interface BusinessDetailsDropinProps extends DropinProps {
    taskType: TaskType;
    legalEntityResponse: ExistingLegalEntity;
    efpBusinessLines: BusinessLinesResponse[] | undefined;
    documents: BusinessDetailsDocumentFields | undefined;
    associatedLegalArrangement?: ExistingLegalEntity;
    nestedLegalEntity?: ExistingLegalEntity;
    nestedLegalEntityDetails?: TrustMember | UnincorporatedPartnershipMember;
    country: CountryCode;
    problems: EntityProblems | undefined;
    asModal?: boolean;
    onSubmit?: (data: BusinessDetailsSchema) => void;
}
export type BusinessDetailsDocumentFields = Pick<BusinessDetailsSchema, 'companyRegistrationDocument' | 'companyTaxDocument' | 'companyProofOfDirectorDocument' | 'companyProofOfSignatoryDocument' | 'companyProofOfOwnershipDocument' | 'companyConstitutionalDocument'>;
export interface SubmitDocumentsProps {
    data: BusinessDetailsSchema;
    legalEntity: ExistingLegalEntity;
    documentUtils: DocumentApiUtils;
    userEvents: UserEvents;
}
export interface SubmitBusinessLinesProps {
    data: BusinessDetailsSchema;
    legalEntity: ExistingLegalEntity;
    efpBusinessLines?: BusinessLinesResponse[] | undefined;
    createBusinessLine?: CreateBusinessLine;
    updateBusinessLine?: UpdateBusinessLine;
    t: TFunction<readonly ['common', 'business']>;
    showToast: (options: ToastOptions) => void;
}
export interface SubmitProps {
    data: BusinessDetailsSchema;
    legalEntityResponse: ExistingLegalEntity;
    associatedLegalArrangement?: ExistingLegalEntity;
    nestedLegalEntity?: ExistingLegalEntity;
    nestedLegalEntityDetails?: TrustMember | UnincorporatedPartnershipMember;
    problems: EntityProblems | undefined;
    taskType: TaskType;
    accountHolder: AccountHolderOption;
    forms: FormModelWithValidity[];
    documentUtils: DocumentApiUtils;
    t: TFunction<readonly ['common', 'business']>;
    showToast: (options: ToastOptions) => void;
    setLoadingStatus: Dispatch<StateUpdater<LoadingStatus>>;
    setProblems: Dispatch<StateUpdater<EntityProblems>>;
    handleUpdateLegalEntity: UpdateLegalEntity;
    createLegalEntity: CreateLegalEntity;
    onExternalSubmit: ((data: BusinessDetailsSchema) => void) | undefined;
    isFeatureEnabled: (key: FeatureName) => boolean;
    userEvents: UserEvents;
    efpBusinessLines?: BusinessLinesResponse[] | undefined;
    createBusinessLine?: CreateBusinessLine;
    updateBusinessLine?: UpdateBusinessLine;
    matchingScenario?: Scenario[];
    invalidateRootLegalEntity: () => Promise<void | [void, void]>;
}
