import type { DecisionMakerType } from '../../../core/models/api/decision-maker-type';
import type { ExistingLegalEntity } from '../../../core/models/api/legal-entity';
import type { LegalEntityAssociation } from '../../../core/models/api/legal-entity-association';
import type { BaseOuterFormProps } from '../../../hooks/useForm/types';
import type { Capability, CapabilityName } from '../../../core/models/api/capability';
import type { Scenario } from '../../../core/models/api/get-scenarios';
import type { DocumentUploadSchema } from '../../Shared/forms/DocumentUpload/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 { FormModel } from '../../../types/form';
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 { AdditionalPersonalDetailsSchema } from './AdditionalPersonalDetails/AdditionalPersonalDetails.types';
import type { BasicDetailsSchema } from './BasicDetails/BasicDetails.types';
import type { IdDocumentUploadSchema } from './IdDocumentUpload/types';
import type { IdVerificationMethodSchema } from './IdVerificationMethod/IdVerificationMethod.types';
import type { InviteDetailsSchema } from './InviteDetails/InviteDetails.types';
import type { SignatoryQuestionnaireSchema } from './SignatoryQuestionnaire/SignatoryQuestionnaire.types';
import type { UboQuestionnaireSchema } from './UboQuestionnaire/UboQuestionnaire.types';
export interface IndividualSchema {
    signatoryQuestionnaire?: SignatoryQuestionnaireSchema;
    uboQuestionnaire?: UboQuestionnaireSchema;
    basicDetails?: BasicDetailsSchema;
    idVerificationMethod?: IdVerificationMethodSchema;
    inviteDetails?: InviteDetailsSchema;
    additionalPersonalDetails?: AdditionalPersonalDetailsSchema;
    manualIdUpload?: IdDocumentUploadSchema;
    proofOfResidency?: DocumentUploadSchema<'proofOfResidency'>;
    proofOfNationalId?: DocumentUploadSchema<'proofOfNationalId'>;
    proofOfRelationship?: DocumentUploadSchema<'proofOfRelationship'>;
}
export type IndividualFormID = keyof IndividualSchema;
export interface IndividualProps extends BaseOuterFormProps<IndividualSchema> {
    activeForm: FormModel;
    forms: FormModel[];
    defaultCountry: CountryCode;
    problems?: EntityProblems;
    legalEntityId?: string;
    taskType: TaskType;
    allowedRoles?: DecisionMakerType[];
    parentLegalEntity?: ExistingLegalEntity;
    scenarios?: Scenario[];
    onNext?(): void;
    onBack?(): void;
    asModal?: boolean;
    accountHolder: AccountHolderOption | undefined;
    trustedRoles?: Array<LegalEntityAssociation['type']>;
    setNextHandler?: (fn: (() => void) | undefined) => void;
    handleHomeClick?(): void;
    isInvitedEntity?: boolean;
    invitedEntityDetails?: InvitedEntityDetails;
}
export interface InvitedEntityDetails {
    roles: DecisionMakerType[];
    jobTitle?: string;
    rootCapabilities?: Partial<Record<CapabilityName, Capability>>;
}
export interface IndividualDropinProps extends Omit<IndividualProps, 'legalEntityId' | 'accountHolder' | 'forms' | 'activeForm' | 'defaultCountry'>, Omit<DropinProps, 'taskType'> {
    taskName: 'individualDetails' | 'decisionMakerDetails' | 'legalRepresentativeDetails' | 'trustMemberDetails' | 'individualTrusteeDetails' | 'partnershipMemberDetails' | 'companyOwnerDetails';
    legalEntityResponse?: ExistingLegalEntity;
    trustMember?: TrustMember | UnincorporatedPartnershipMember;
    isTargetLegalEntityType?: boolean;
    country: CountryCode;
    onSubmit?(dataSubmitted: IndividualSchema, scenario?: Scenario[]): void;
    isInstantVerificationEnabled?: boolean;
    handleHomeClick(): void;
    isInvitedEntity?: boolean;
    invitedEntityDetails?: InvitedEntityDetails;
}
