import { VariableSizeNodeData } from 'react-vtree';
import { AccountBase, AccountGroupReport, AccountGroupReportV2, AccountReconciliationByAccount, AccountReconciliationBySection, AccountReport, AgingBalance, AgingBalancesByVendor, AgingPeriod, AgingReportSortKey, COABalance, COABalancesOrder, CalculatedSection, ClassBase, ClassColumnDefinition, FetchState, FluxAnalysisSectionType, FluxAnalysisSortKey, FluxAnalysisVendorView, FluxVendorAccountsAndClassesView, ID, Month, NestedAccountReport, NestedAgingBalancesByCustomer, NestedClassHierarchyForReport, NestedClassID, NestedClassReportV2, OpExBalancesByVendor, OpexByVendorSortKey, ProjectReportWithBalances, ReportFormat, ReportID, ReportIDPlusForecastID, Section, SectionAccountsViewReport, SectionClassesViewReportV2, SectionProjectViewReport, SectionWithAccountOnly, SortOrder, TimeframeTick, Vendor, ZeniDate } from '@zeniai/client-epic-state';
import { default as SectionType, AccountGroupNilBalancesFilter, AccountNilBalancesFilter } from '../dataSelector/dataSelector';
import { FluxSectionViewReport, FluxTotalRowReport } from './treeNode/fluxAnalysisReport/treeNodeMappers/treeNodeMappersTypes';
export type ReportTreeKind = "name_only" | "name+balances_actual" | "name+balances_forecast";
export type ReportElementKind = "checkbox_and_name_only" | "title_string_only" | "total" | "section" | "section_with_ac_only" | "calculated_section" | "calculated_section_type1" | "ac_group_report" | "ac_report" | "ac_group_subaccount" | "ac_subaccount" | "ac_subentity_total" | "class" | "project" | "class_headers" | "timeframe_headers" | "timeframe_headers_with_forecast" | "aging_report_row" | "vendor_row" | "loading_in_progress" | "headers_loading_in_progress" | "spacer_row" | "flux_vendor_row" | "flux_vendor_account_class_row";
export type ReportTreeMode = "none" | "actual_vs_forecast" | "this_period_vs_period_before";
export interface ElementMetadata {
}
/** Mirrors `@zeniai/client-epic-state` (published types lag; keep aligned with CES). */
export declare const HORIZONTAL_CLASS_TOTAL_BALANCE_ID = "__horizontal_total__";
/**
 * Horizontal P&L-by-class synthetic row (selector-enriched). Same shape as CES
 * `HorizontalAccountReportData`.
 */
export interface HorizontalAccountReportData {
    accountId: string;
    accountName: string;
    balancesInTimeframe: import('@zeniai/client-epic-state').COABalancesSlice;
    depth: number;
    accountType?: import('@zeniai/client-epic-state').AccountType;
    horizontalTreeView?: {
        hasChildren: boolean;
        hasSiblings: boolean;
        isLastNode: boolean;
        isLeaf: boolean;
        subAccountAncestorMetadata: {
            depth: number;
            hasChildren: boolean;
            hasSibling: boolean;
            isLastNode: boolean;
            isFirstNode?: boolean;
            name?: string;
        }[];
        treeDepth: number;
        combinedAncestorMetadata?: AncestorMetadata[];
    };
}
export declare function isHorizontalAccountReportData(data: unknown): data is HorizontalAccountReportData;
/**
 * Optional context for `onAccountBalanceClick` when the row is horizontal P&L by class
 * (avoids consumers depending on {@link HORIZONTAL_CLASS_TOTAL_BALANCE_ID}).
 */
export interface AccountBalanceClickMeta {
    /** User clicked a class column (`balance.id` is the class id). */
    isHorizontalClassColumn?: boolean;
    /** User clicked the Total column (non–by-class transaction list). */
    isHorizontalClassTotalColumn?: boolean;
}
/** Derives click metadata for horizontal class layout; otherwise `undefined`. */
export declare function getAccountBalanceClickMeta(account: AccountReport | undefined, balance: COABalance | null): AccountBalanceClickMeta | undefined;
interface ReportElement {
    kind: ReportElementKind;
    numOfBalances: number;
    title: string;
    data?: Section | SectionWithAccountOnly | CalculatedSection | AccountGroupReport | AccountReport | HorizontalAccountReportData | SectionClassesViewReportV2 | SectionAccountsViewReport | NestedAccountReport | AccountGroupReportV2 | NestedClassReportV2 | ProjectReportWithBalances | SectionProjectViewReport | COABalance[] | ClassColumnDefinition[] | NestedClassHierarchyForReport | AgingPeriod[] | AgingBalance[] | AgingBalancesByVendor | NestedAgingBalancesByCustomer | OpExBalancesByVendor | FluxSectionViewReport | FluxAnalysisVendorView | FluxVendorAccountsAndClassesView | FluxTotalRowReport | AccountReconciliationBySection | AccountReconciliationByAccount;
    index?: number;
    metadata?: ElementMetadata;
    sectionType?: SectionType;
}
export interface ReportElementConfig {
    displayOrder: COABalancesOrder;
    filterAccountGroupsWithNilBalances: AccountGroupNilBalancesFilter;
    filterAccountsWithNilBalances: AccountNilBalancesFilter;
    firstMonthOfFY: Month;
    mode: ReportTreeMode;
    reportFormat: ReportFormat;
    reportId: ReportID | ReportIDPlusForecastID;
    showNegativeAmountInParenthesis: boolean;
    accountReconciliationConfig?: {
        assetsCount: number;
        isExcludeInProgress: boolean;
        isIncludeInProgress: boolean;
        liabilitiesCount: number;
        tableType: "excluded" | "normal";
        selectedDrawerAccountId?: ID;
        onConnectClicked: (accountId: ID) => void;
        onOpenDrawerClicked: (accountId: ID) => void;
        onReconnectClicked: (accountId: ID) => void;
        onReviewClicked: (accountId: ID) => void;
        onStatementAddClicked: (accountId: ID) => void;
        onExcludeClicked?: (accountId: ID) => void;
        onIgnoreDetectionClicked?: (accountId: ID) => void;
    };
    agingReportConfig?: {
        sortKey: AgingReportSortKey;
        sortOrder: SortOrder;
        onEntityNameClick: (entityId: ID) => void;
        onSortOrderChanged: (sortOrder: SortOrder, sortKey: AgingReportSortKey) => void;
    };
    bookCloseDate?: ZeniDate;
    dataAvailable?: TimeframeTick;
    fluxAnalysisConfig?: {
        fetchStatus: FetchState;
        isClassColumnShown: boolean;
        reviewOpExIds: ID[];
        reviewSectionIds: FluxAnalysisSectionType[];
        sortKey: FluxAnalysisSortKey;
        sortOrder: SortOrder;
        sortOrSearchInProgress: boolean;
        handleRedirectToVendorDetailPage: (vendor: Vendor) => void;
        onSectionCheckboxClick: (id: FluxAnalysisSectionType, isSelected: boolean) => void;
        onSectionRowClick: (sectionId: FluxAnalysisSectionType) => void;
        onSortOrderChanged: (sortOrder: SortOrder, sortKey: FluxAnalysisSortKey) => void;
        setIsSortApplied: (sortingChanged: boolean) => void;
        updateNodeCollapsableStatus: (nodeId: ID) => void;
        updateOperatingExpensesIdsForReview: (opExIds: ID[]) => void;
    };
    isZeniCOAInUse?: boolean;
    opexByVendorConfig?: {
        isAccountColumnShown: boolean;
        isClassColumnShown: boolean;
        isCompareModeOn: boolean;
        pageFetchInProgress: boolean;
        sortKey: OpexByVendorSortKey;
        sortOrder: SortOrder;
        sortOrSearchInProgress: boolean;
        onSortOrderChanged: (sortOrder: SortOrder, sortKey: OpexByVendorSortKey) => void;
        onVendorNameAndBalanceClicked: (vendor: Vendor, balance?: COABalance, category?: AccountBase, classBase?: ClassBase) => void;
    };
    showClassAccountNumber?: boolean;
    isClassToBeFilteredOut?: (classId: NestedClassID) => boolean;
}
export interface ReportElementData {
    config: ReportElementConfig;
    element: ReportElement;
}
export interface ReportTreeNodeData extends VariableSizeNodeData {
    readonly isFirstNode: boolean;
    readonly isLastNode: boolean;
    readonly isLeaf: boolean;
    readonly nestingLevel: number;
    readonly reportElementData: ReportElementData;
    readonly treeKind: ReportTreeKind;
}
export interface ReportTreeNode {
    children: ReportTreeNode[];
    id: string;
    isLastNode: boolean;
    reportElementData: ReportElementData;
    isFirstNode?: boolean;
}
export interface ReportTreeNodeMetadata {
    nestingLevel: number;
    node: ReportTreeNode;
    treeKind: ReportTreeKind;
}
export interface AncestorMetadata {
    depth: number;
    hasChildren: boolean;
    hasSibling: boolean;
    isLastNode: boolean;
    isFirstNode?: boolean;
    name?: string;
}
export interface TreeViewProps {
    collapsed: boolean;
    depth: number;
    displayName: string;
    hasChildren: boolean;
    hasSiblings: boolean;
    isLastNode: boolean;
    isLeaf: boolean;
    classDepth?: number;
    isBillEditableCoaAccountType?: boolean;
    isDeleted?: boolean;
    isOptionRecommended?: boolean;
    isSelected?: boolean;
    /** When true, label row height follows content (e.g. stacked with subtext in grouped selects). */
    stackWithSubtext?: boolean;
    subAccountAncestorMetadata?: AncestorMetadata[];
}
export interface TreeNodeProps extends TreeViewProps {
    id: string;
    ancestorMetadata?: AncestorMetadata[];
    coaId?: string;
    qboId?: string;
}
export {};
