import { ChildReportExecutionData } from './ExecutionData.d.js';
import { QuerySummaryItem } from '../components/_async/request-details/types.d.js';

import Dict = NodeJS.Dict;

interface StoredReportData {
    reportId: string;
    variantId?: string | undefined;
    id: string;
    executionId?: string | undefined;
    tableId?: string | undefined;
    reportName: string;
    variantName?: string | undefined;
    name: string;
    description: string;
    schedule?: string | undefined;
    status?: RequestStatus | undefined;
    timestamp: AsyncReportsTimestamp;
    dataProductDefinitionsPath?: string | undefined;
    dpdPathFromQuery?: boolean | undefined;
    query?: AsyncReportQueryData | undefined;
    interactiveQuery?: AsyncReportQueryData | undefined;
    url?: AsyncReportUrlData | undefined;
    type: ReportType;
    loadType?: LoadType | undefined;
    childExecutionData?: Array<ChildReportExecutionData> | undefined;
}
interface RequestedReport extends StoredReportData {
    errorMessage?: string | undefined;
    filters?: ParamsConfig | undefined;
    sortBy?: ParamsConfig | undefined;
}
interface RequestedDashboard extends StoredReportData {
    metrics: {
        name: string;
    }[];
}
type RecentlyViewedReport = StoredReportData;
type SubscribedReport = StoredReportData;
type UserReportData = RequestedReport | RecentlyViewedReport | StoredReportData | RequestedDashboard | SubscribedReport;
interface AsyncReportUrlData {
    origin: string;
    request?: AsyncReportUrlItemData | undefined;
    report?: AsyncReportUrlItemData | undefined;
    polling?: AsyncReportUrlItemData | undefined;
}
interface AsyncReportUrlItemData {
    pathname?: string | undefined;
    fullUrl?: string | undefined;
    search?: string | undefined;
    default?: string | undefined;
}
interface AsyncReportQueryData {
    data: Dict<string | string[]>;
    summary: QuerySummaryItem[];
}
interface ParamsConfig {
    data: Dict<string>;
    queryString: string;
}
declare enum RequestStatus {
    SUBMITTED = "SUBMITTED",
    STARTED = "STARTED",
    PICKED = "PICKED",
    FINISHED = "FINISHED",
    FAILED = "FAILED",
    ABORTED = "ABORTED",
    EXPIRED = "EXPIRED",
    READY = "READY",
    ALL = "ALL"
}
declare enum ReportType {
    REPORT = "report",
    DASHBOARD = "dashboard",
    UNAVAILABLE = "unavailable"
}
interface AsyncReportsTimestamp {
    lastViewed?: Date | undefined;
    requested?: Date | undefined;
    completed?: Date | undefined;
    expired?: Date | undefined;
    failed?: Date | undefined;
    retried?: Date | undefined;
    aborted?: Date | undefined;
    refresh?: Date | undefined;
}
declare enum LoadType {
    SYNC = "sync",
    ASYNC = "async",
    SCHEDULED = "scheduled"
}

export { LoadType, ReportType, RequestStatus };
export type { AsyncReportQueryData, AsyncReportUrlData, AsyncReportUrlItemData, AsyncReportsTimestamp, ParamsConfig, RecentlyViewedReport, RequestedDashboard, RequestedReport, StoredReportData, SubscribedReport, UserReportData };
