import type { CapabilityName } from '../../../../core/models/api/capability';
import type { DataSet } from '../../../../core/models/api/data-set';
import type { Individual } from '../../../../core/models/api/individual';
import type { LegalEntityType } from '../../../../core/models/api/legal-entity-type';
import type { Organization } from '../../../../core/models/api/organization';
import type { BusinessLinesType, SourceOfFundsAmount, SourceOfFundsCategoryType, SourceOfFundsFinancierType } from '../../../../core/models/api/source-of-funds';
import type { ExistingLegalEntity } from '../../../../core/models/api/legal-entity';
import type { CountryCode } from '../../../../types/datasets/country-code';
import type { EntityProblems } from '../../../../types/errors/entity-problems';
import type { FormVerificationErrors } from '../../../../types/errors/form-verification-errors';
import type { FormModel } from '../../../../types/form';
import type { FormUtils } from '../../../../utils/formUtils';
import type { ValidationRuleResult, ValidatorMode } from '../../../../utils/validation/types';
import type { DropinProps } from '../../../EmbeddedDropins/OnboardingDropinComponent/DropinComposer/types';
export interface SourceOfFundsProps {
    activeForm?: FormModel;
    sourceOfFundsType?: SourceOfFundsCategoryType | undefined;
    data?: SourceOfFundsSchema;
    country: CountryCode;
    activeBusinessLine?: BusinessLinesType;
    sameAsOption?: SameAsSourceOfFundsOption;
    useSameAs?: boolean;
    onUseSameAsChange?: (useSameAs: boolean) => void;
}
export interface SourceOfFundsSchema {
    sourceOfFundsType: SourceOfFundsTypeSchema;
    additionalData: SourceOfFundsAdditionalDataSchema;
}
export interface SourceOfFundsDropinProps extends DropinProps {
    country: CountryCode;
    problems?: EntityProblems;
    legalEntityResponse?: ExistingLegalEntity;
    capabilities?: CapabilityName[];
    onSubmit?(dataSubmitted: SourceOfFundsSchema): void;
    asAwe?: boolean;
}
export interface SourceOfFundsTypeSchema {
    type?: SourceOfFundsCategoryType;
}
export interface SourceOfFundsAdditionalDataSchema {
    description?: string;
    dateOfFundsReceived?: string;
    purpose?: string;
    relationship?: string;
    originatorLegalEntityId?: string;
    amount?: SourceOfFundsAmount;
    financiers?: SourceOfFundsFinancierType[];
    cryptocurrencyExchange?: string;
    dateOfSourceEvent?: string;
    website?: string;
    legalName?: string;
    country?: CountryCode;
    firstName?: string;
    lastName?: string;
    originatorType?: OriginatorTypeUnion;
}
export interface SameAsSourceOfFundsOption {
    businessLineId: string;
    productName: string;
    sourceOfFunds: SourceOfFundsSchema;
}
export interface SourceOfFundsTypeProps {
    categories?: DataSet;
    data?: SourceOfFundsTypeSchema;
    errors?: Partial<Record<keyof SourceOfFundsTypeSchema, ValidationRuleResult | null>>;
    valid?: Partial<Record<keyof SourceOfFundsTypeSchema, boolean>>;
    fieldValidationErrors?: Partial<Record<keyof SourceOfFundsTypeSchema, boolean>>;
    sameAsOption?: SameAsSourceOfFundsOption;
    useSameAs?: boolean;
    onUseSameAsChange?: (useSameAs: boolean) => void;
}
export interface SourceOfFundsAdditionalDataProps {
    fieldValidationErrors?: Partial<Record<keyof SourceOfFundsAdditionalDataSchema, boolean>>;
    formVerificationErrors?: FormVerificationErrors;
}
export declare const additionalDataSchemaKeys: (keyof SourceOfFundsAdditionalDataSchema)[];
export interface AdditionalDataProps {
    formUtils: FormUtils<SourceOfFundsAdditionalDataSchema>;
    handleChangeFor: (key: keyof SourceOfFundsAdditionalDataSchema, mode?: ValidatorMode) => (e: any) => void;
    data: SourceOfFundsAdditionalDataSchema;
    errors: Partial<Record<keyof SourceOfFundsAdditionalDataSchema, ValidationRuleResult | null>>;
    valid: Partial<Record<keyof SourceOfFundsAdditionalDataSchema, boolean>>;
    fieldProblems: Partial<Record<keyof SourceOfFundsAdditionalDataSchema, boolean>>;
    handleAmountChange: (key: 'currency' | 'amount') => (e: any) => void;
    categories?: DataSet;
}
export type OriginatorTypeUnion = 'individual' | 'organization';
export interface SOFOriginatorPayload {
    id?: string;
    type?: LegalEntityType;
    individual?: Individual;
    organization?: Organization;
}
