import { BarManager } from "../BarManager/BarManager";
import { GanttClientCommand } from "../Commands/ClientCommand";
import { CommandManager } from "../Commands/CommandManager";
import { Resource } from "../Model/Entities/Resource";
import { ViewType, TaskTitlePosition } from "../View/Helpers/Enums";
import { EditingSettings } from "../View/Settings/EditingSettings";
import { ValidationSettings } from "../View/Settings/ValidationSettings";
import { ICommand } from "./ICommand";
import { ITaskAreaContainer } from "./ITaskAreaContainer";

export interface IGanttView {
    commandManager: CommandManager;
    barManager: BarManager;
    setViewType(viewType: ViewType): void;
    setViewTypeRange(start: ViewType, end: ViewType): void;
    setTaskTitlePosition(taskTitlePosition: TaskTitlePosition): void;
    setFirstDayOfWeek(firstDayOfWeek: number): void;
    setShowResources(showResources: boolean): void;
    setShowDependencies(showDependencies: boolean): void;
    loadOptionsFromGanttOwner(): void;
    resetAndUpdate(): void;
    cleanMarkup(): void;
    checkAndProcessModelChanges(): boolean;
    updateRowHeights(height: number): void;

    onBrowserWindowResize(): void;

    selectTask(id: string): void;
    unselectTask(id: string): void;

    getTaskAreaContainer(): ITaskAreaContainer;
    setWidth(value: number): void;
    setHeight(value: number): void;
    setAllowSelection(value: boolean): void;
    setEditingSettings(value: EditingSettings): void;
    setValidationSettings(value: ValidationSettings): void;
    setRowLinesVisible(value: boolean): void;


    insertTask(data: any): string;
    insertDependency(data: any): void;
    insertResource(data: any, taskKeys: any[]): void;

    updateTask(key: any, data: any);

    deleteTask(key: any): void;
    deleteDependency(key: any): void;
    deleteResource(key: any): void;

    assignResourceToTask(resourceKey: any, taskKey: any): void;
	unassignResourceFromTask(resourceKey: any, taskKey: any): void;
    unassignAllResourcesFromTask(taskPublicKey: any): void;

    getTaskData(key: any): any;
    getDependencyData(key: any): any;
    getResourceData(key: any): any;
    getResourceAssignmentData(key: any): any;

    getTaskResources(key): Array<Resource>;
    getVisibleTaskKeys(): Array<any>;
    getVisibleDependencyKeys(): Array<any>;
    getVisibleResourceKeys(): Array<any>;
    getVisibleResourceAssignmentKeys(): Array<any>;

    getTasksExpandedState(): Record<any, boolean>;
    applyTasksExpandedState(state: Record<any, boolean>): void;

    scrollToDate(date: any) : void;

    exportToPdf(options: Record<string, any>): any;
    showTaskEditDialog(): void;
    showTaskDetailsDialog(taskPublicKey: any): void;
    showResourcesDialog(): void;
    getCommandByKey(key: GanttClientCommand): ICommand;

    updateWithDataReload(keepExpandState: boolean): void;
}
