import { ConfigState } from './ConfigState';
import { BaseSchedule } from './Common/Schedule';
import { ColumnScope } from './Common/ColumnScope';
import { AdaptableColumnBase } from './Common/AdaptableColumn';
import { AdaptableObject } from './Common/AdaptableObject';
import { AdaptableFormData } from './Common/AdaptableForm';
import { AdaptableBooleanQuery } from './Common/AdaptableQuery';
import { ExportDestination } from './Common/Enums';
/**
 * Predefined Configuration for Export Module
 */
export interface ExportState extends ConfigState {
    /**
     * Currently selected Report - in Export Toolbar & Tool Panel
     */
    CurrentReport?: string;
    /**
     * Currently selected Report Destination in Export Toolbar & Tool Panel
     */
    CurrentDestination?: ExportDestination | string;
    /**
     * User-created Reports; each has Name and Row and Column Scope
     */
    Reports?: Report[];
}
/**
 * A Report which can export data from AdapTable
 */
export interface Report extends AdaptableObject {
    /**
     * Name of Report
     */
    Name: SystemReportName | string;
    /**
     * Columns to display: 'AllColumns', 'VisibleColumns', 'SelectedColumns', 'ScopeColumns'
     */
    ReportColumnScope: ReportColumnScope;
    /**
     * Rows to export: 'AllRows', 'VisibleRows', 'SelectedCellRows', 'SelectedRows', 'ExpressionRows'
     */
    ReportRowScope: ReportRowScope;
    /**
     * Columns Scope; only required if `ReportColumnScope` is 'ScopeColumns'
     */
    Scope?: ColumnScope;
    /**
     * Query to use; only required if `ReportRowScope` is 'ExpressionRows'
     */
    Query?: AdaptableBooleanQuery;
}
/**
 * Defines a Scheduled Report - used in Schedule Module (where State is stored)
 */
export interface ReportSchedule extends BaseSchedule {
    /**
     * Name of Report to run on Schedule
     */
    ReportName: string;
    /**
     * Where report data will be exported
     */
    ExportDestination: 'Excel' | 'CSV' | 'Clipboard' | 'JSON' | string;
    /**
     * Additional data for a Custom Destination produced by a Dynamic Form
     */
    ExportDestinationData?: AdaptableFormData;
}
/**
 * Defines the data in a Report run by AdapTable
 */
export interface ReportData {
    /**
     * Columns in the Report
     */
    columns: AdaptableColumnBase[];
    /**
     * Row Data in the Report
     */
    rows: Record<string, any>[];
}
/**
 * Names of Reports provided by AdapTable
 */
export type SystemReportName = 'Visual Data' | 'All Data' | 'Current Data' | 'Selected Cells' | 'Selected Rows';
/**
 * Columns to be included in a Report
 */
export type ReportColumnScope = 'AllColumns' | 'VisibleColumns' | 'SelectedColumns' | 'ScopeColumns';
/**
 * AG Grid Row Data to be included in a Report
 */
export type ReportRowScope = 'AllRows' | 'VisibleRows' | 'SelectedCellRows' | 'SelectedRows' | 'ExpressionRows';
/**
 * Array containing all System Report names
 */
export type SystemReportNames = SystemReportName[];
