import { CompositeFilterDescriptor as KendoCompositeFilterDescriptor } from "../DataTools/Filter/FilterProps";
import {
  FilterDescriptor as KendoFilterDescriptor,
  SortDescriptor as KendoSortDescriptor,
} from "@progress/kendo-data-query";
import { SortSettings as KendoSortSettings } from "@progress/kendo-react-data-tools";
import {
  GanttColumnProps as KendoGanttColumnProps,
  GanttDependencyModelFields as KendoGanttDependencyModelFields,
  GanttRowProps as KendoGanttRowProps,
  GanttSelectableSettings as KendoGanttSelectableSettings,
  GanttTaskModelFields as KendoGanttTaskModelFields,
  GanttAddClickEvent as KendoGanttAddClickEvent,
  GanttColumnMenuFilterChangeEvent as KendoGanttColumnMenuFilterChangeEvent,
  GanttColumnReorderEvent as KendoGanttColumnReorderEvent,
  GanttColumnResizeEvent as KendoGanttColumnResizeEvent,
  GanttDataStateChangeEvent as KendoGanttDataStateChangeEvent,
  GanttDependencyCreateEvent as KendoGanttDependencyCreateEvent,
  GanttExpandChangeEvent as KendoGanttExpandChangeEvent,
  GanttFilterChangeEvent as KendoGanttFilterChangeEvent,
  GanttHeaderSelectionChangeEvent as KendoGanttHeaderSelectionChangeEvent,
  GanttKeyDownEvent as KendoGanttKeyDownEvent,
  GanttRowClickEvent as KendoGanttRowClickEvent,
  GanttRowContextMenuEvent as KendoGanttRowContextMenuEvent,
  GanttRowDoubleClickEvent as KendoGanttRowDoubleClickEvent,
  GanttSelectionChangeEvent as KendoGanttSelectionChangeEvent,
  GanttSortChangeEvent as KendoGanttSortChangeEvent,
  GanttTaskClickEvent as KendoGanttTaskClickEvent,
  GanttTaskContextMenuEvent as KendoGanttTaskContextMenuEvent,
  GanttTaskDoubleClickEvent as KendoGanttTaskDoubleClickEvent,
  GanttTaskRemoveClickEvent as KendoGanttTaskRemoveClickEvent,
  GanttViewChangeEvent as KendoGanttViewChangeEvent,
} from "@progress/kendo-react-gantt";
import { GanttView as KendoGanttView } from "@progress/kendo-react-gantt/dist/npm/interfaces/GanttView";

export interface GanttNoRecordsProps {
  children?: React.ReactNode;
}

export interface GanttProps {
  dataTestId?: string;
  children?: KendoGanttView | KendoGanttView[] | undefined;
  className?: string;
  columnMenu?: React.ComponentType<any>;
  columnMenuFilter?: KendoCompositeFilterDescriptor[];
  columns?: KendoGanttColumnProps[];
  defaultView?: string;
  dependencyData?: any[];
  dependencyModelFields?: KendoGanttDependencyModelFields;
  filter?: KendoFilterDescriptor[];
  navigatable?: boolean;
  noRecords?: React.ReactElement<GanttNoRecordsProps>;
  reorderable?: boolean;
  resizable?: boolean;
  row?: React.ComponentType<KendoGanttRowProps>;
  rowHeight?: number;
  selectable?: KendoGanttSelectableSettings;
  sort?: KendoSortDescriptor[];
  sortable?: KendoSortSettings;
  style?: React.CSSProperties;
  taskData?: any[];
  taskModelFields?: KendoGanttTaskModelFields;
  timezone?: string;
  toolbar?: { addTaskButton: boolean };
  view?: string;
  onAddClick?: (event: KendoGanttAddClickEvent) => void;
  onColumnMenuFilterChange?: (
    event: KendoGanttColumnMenuFilterChangeEvent
  ) => void;
  onColumnReorder?: (event: KendoGanttColumnReorderEvent) => void;
  onColumnResize?: (event: KendoGanttColumnResizeEvent) => void;
  onDataStateChange?: (event: KendoGanttDataStateChangeEvent) => void;
  onDependencyCreate?: (event: KendoGanttDependencyCreateEvent) => void;
  onExpandChange?: (event: KendoGanttExpandChangeEvent) => void;
  onFilterChange?: (event: KendoGanttFilterChangeEvent) => void;
  onHeaderSelectionChange?: (
    event: KendoGanttHeaderSelectionChangeEvent
  ) => void;
  onKeyDown?: (event: KendoGanttKeyDownEvent) => void;
  onRowClick?: (event: KendoGanttRowClickEvent) => void;
  onRowContextMenu?: (event: KendoGanttRowContextMenuEvent) => void;
  onRowDoubleClick?: (event: KendoGanttRowDoubleClickEvent) => void;
  onSelectionChange?: (event: KendoGanttSelectionChangeEvent) => void;
  onSortChange?: (event: KendoGanttSortChangeEvent) => void;
  onTaskClick?: (event: KendoGanttTaskClickEvent) => void;
  onTaskContextMenu?: (event: KendoGanttTaskContextMenuEvent) => void;
  onTaskDoubleClick?: (event: KendoGanttTaskDoubleClickEvent) => void;
  onTaskRemoveClick?: (event: KendoGanttTaskRemoveClickEvent) => void;
  onViewChange?: (args: KendoGanttViewChangeEvent) => void;
}
