import { ClientAnalytics } from '@zeniai/client-analytics';
import { AccountBase, Amount, Attachment, AutoFields, BillStageCodeType, BillStatusCodeType, ClassBase, CompanyMileageConfigInfo, CountryWithCurrency, Currency, DuplicateLine, FetchState, FetchStateAndError, ID, Merchant, NestedAccountHierarchyForReport, NestedClassHierarchyForReport, Recommendation, RecommendedAccountBase, UncategorizedAccounts } from '@zeniai/client-epic-state';
import { AutoCompleteData } from '../../../common/autoComplete/autoCompleteProps';
import { CreatableSingleSelectFieldValue } from '../../../creatableSingleSelect/CreatableSingleSelectField';
import { AutoCompleteSingleSelectFieldValue, OptionType } from '../../../formElements/autoCompleteSingleSelectField/AutoCompleteSingleSelectField';
import { FormSectionProps } from '../../../formElements/common/formSection';
import { CurrencyAmountFormData } from '../../../formElements/currencyAmountField/CurrencyAmountField';
import { GroupedSingleSelectFieldValue } from '../../../formElements/labeledGroupSingleSelectFieldWithRecommendationCheckbox/GroupedSingleSelectField';
import { MileageFormData, OutOfPocketFormData } from '../types';
export interface CustomerSearchAutoComplete {
    customerSearchAutoCompleteData: AutoCompleteData;
    loadOptions?: (inputValue: string, callback: (defaultOptions: OptionType[]) => void) => void;
}
export interface LineItemsSectionFormData {
    lineId: string;
    mileage: MileageFormData;
    outOfPocket: OutOfPocketFormData;
    reimbursementType: string;
}
export type FormDataKeys = keyof LineItemsSectionFormData;
export declare const uniqueName: (sectionId: string, key: FormDataKeys) => `${string}.lineId` | `${string}.reimbursementType` | `${string}.mileage` | `${string}.outOfPocket`;
export declare const formUniqueName: (formId: ID) => `${string}_form`;
export type FormDataKeyUniqueNames = ReturnType<typeof uniqueName>;
export interface LineInfoFormData {
    lineId: ID;
    lineIndex: number;
    mileage: {
        class: GroupedSingleSelectFieldValue;
        amount?: Amount;
        customer?: AutoCompleteSingleSelectFieldValue;
        distanceInMiles?: number;
        memo?: string;
        transactionDate?: Date;
    };
    outOfPocket: {
        account: GroupedSingleSelectFieldValue;
        class: GroupedSingleSelectFieldValue;
        isCategoryFirstTimeAutofilled: boolean;
        isCategoryUpdateSelected: boolean;
        isRetainedCategorySelected: boolean;
        merchant: CreatableSingleSelectFieldValue;
        recommendations: Recommendation[];
        amount?: OutOfPocketCurrencyAmount;
        customer?: AutoCompleteSingleSelectFieldValue;
        memo?: string;
        recommendedAccount?: RecommendedAccountBase;
        retainedAccount?: AccountBase;
        transactionDate?: Date;
    };
    reimbursementType: string;
    file?: Attachment;
    homeCurrencyConversions?: Amount;
}
export interface OutOfPocketCurrencyAmount extends Amount {
    currency: CurrencyAmountFormData;
}
export interface ReimbursementSectionProps extends FormSectionProps {
    accountList: AccountBase[];
    accountsHierarchyList: NestedAccountHierarchyForReport[];
    allCurrencies: CountryWithCurrency[];
    classHierarchyList: NestedClassHierarchyForReport[];
    classList: ClassBase[];
    currencyConversionState: FetchStateAndError;
    defaultCurrency: Currency;
    fileRequiredLineIds: ID[];
    hasFile: boolean;
    hasMultipleLineItems: boolean;
    isAccountingClassesEnabled: boolean;
    isAddReimbursementDisabled: boolean;
    isReimbursementCommentingEnabled: boolean;
    lineData: LineInfoFormData;
    lineIndex: number;
    merchantList: Merchant[];
    remiStage: BillStageCodeType;
    uncategorizedAccounts: UncategorizedAccounts;
    analytics?: ClientAnalytics;
    autoFields?: AutoFields;
    companyMileageConfigInfo?: CompanyMileageConfigInfo;
    customerSearchAutoComplete?: CustomerSearchAutoComplete;
    duplicateLineDetails?: DuplicateLine;
    recommendationFetchState?: FetchState;
    reimbursementId?: string;
    remiStatus?: BillStatusCodeType;
    style?: React.CSSProperties;
    tentativeMerchantName?: string;
    onDuplicateLineClick: (reimbursementId: ID, lineId: ID) => void;
    onRemoveReimbursement: (lineIndex: number) => void;
    removeDuplicateReimbursementForLine: (lineId: string) => void;
    scrollToSection: (id: string) => void;
    clearTentativeNameForLine?: (lineId: string) => void;
}
export declare const ReimbursementSection: ({ lineData, currencyConversionState, recommendationFetchState, remiStage, lineIndex, accountList, classList, merchantList, hasFile, defaultCurrency, hasMultipleLineItems, fileRequiredLineIds, duplicateLineDetails, remiStatus, sectionId, isDisabled, isReimbursementCommentingEnabled, isAddReimbursementDisabled, style, autoFields, analytics, reimbursementId, tentativeMerchantName, companyMileageConfigInfo, customerSearchAutoComplete, uncategorizedAccounts, removeDuplicateReimbursementForLine, scrollToSection, onDuplicateLineClick, onRemoveReimbursement, clearTentativeNameForLine, allCurrencies, accountsHierarchyList, classHierarchyList, isAccountingClassesEnabled, }: ReimbursementSectionProps) => import("react/jsx-runtime").JSX.Element;
