import { Property, ChildProperty, Complex } from '@syncfusion/ej2-base';import { TimelineViewMode } from '../base/enum';import { ITimelineFormatter } from '../base/interface';

/**
 * Interface for a class TimelineTierSettings
 */
export interface TimelineTierSettingsModel {

    /**
     * Defines timeline cell format.
     *
     * @default ''
     */
    format?: string;

    /**
     * Defines timeline mode of Gantt header.
     * * `None` - Default.
     * * `Week` - Define the week mode header.
     * * `Day` - Define the day mode header.
     * * `Hour` - Define the hour mode header.
     * * `Month` - Define the month mode header.
     * * `Year` - Define the year mode header.
     * * `Minutes` - Define the minutes mode header.
     *
     * @default 'None'
     */
    unit?: TimelineViewMode;

    /**
     * Defines number of timeline units combined for single cell.
     *
     * @default 1
     */
    count?: number;

    /**
     * Defines method to get custom formatted values of timeline cells.
     *
     * @default null
     */
    formatter?: string | ITimelineFormatter;

}

/**
 * Interface for a class TimelineSettings
 */
export interface TimelineSettingsModel {

    /**
     * Defines timeline mode of Gantt header.
     * * `None` - Default.
     * * `Week` - Define the week mode header.
     * * `Day` - Define the day mode header.
     * * `Hour` - Define the hour mode header.
     * * `Month` - Define the month mode header.
     * * `Year` - Define the year mode header.
     * * `Minutes` - Define the minutes mode header.
     *
     * When set to any value other than 'None', this mode suggests a default topTier/bottomTier combination,
     * but any explicit manual tier settings (e.g., unit) take precedence and override the mode's defaults.
     *
     * @default 'None'
     */
    timelineViewMode?: TimelineViewMode;

    /**
     * Defines top tier setting in timeline.
     * When timelineViewMode is set to a specific mode (not 'None'), explicit topTier settings override the mode's default.
     */
    topTier?: TimelineTierSettingsModel;

    /**
     * Defines bottom tier settings in timeline.
     * When timelineViewMode is set to a specific mode (not 'None'), explicit bottomTier settings override the mode's default.
     */
    bottomTier?: TimelineTierSettingsModel;

    /**
     * Defines width of timeline cell.
     *
     * @default 33
     */
    timelineUnitSize?: number;

    /**
     * Sets the first day of the week for timeline week calculations and labels.
     * Accepts values: 0 = Sunday, 1 = Monday, ..., 6 = Saturday.
     *
     * The property only works when the timeline displays weeks.
     * Make sure to enable week view using one of these:
     *   - `timelineViewMode: 'Week'`
     *   - or `topTier.unit: 'Week'` + `bottomTier.unit: 'Day'`
     *
     * Without a week-level tier in the timeline, changing this property will not change anything visible.
     *
     * @default 0  // Sunday
     */
    weekStartDay?: number;

    /**
     * Defines the background color for weekend cells when the timeline shows day-level units (i.e., timelineViewMode is 'Day' or 'Week' and bottomTier.unit is 'Day').
     *
     * @default null
     */
    weekendBackground?: string;

    /**
     * Enables or disables tooltip for timeline cells.
     *
     * @default true
     */
    showTooltip?: boolean;

    /**
     * Enables or disables timeline auto update on editing action.
     *
     * @default true
     */
    updateTimescaleView?: boolean;

    /**
     * Enables or disables the display of weekend cells in the Gantt Chart timeline.
     * Weekend days are determined based on the `workweek` configuration, which defines the working days (e.g., Monday to Friday).
     * Any day not included in the `workweek` is treated as a non-working day.
     * When set to `false`, non-working days will be hidden from the timeline view.
     * @default true
     */
    showWeekend?: boolean;

    /**
     * Specifies the start date for the visible timeline rendering in the Gantt chart UI.
     * If a specific date is provided, the timeline starts at this date and remains fixed.
     *
     * @default 'auto'
     */
    viewStartDate?: Date | string | 'auto';

    /**
     * Specifies the end date for the visible timeline rendering in the Gantt chart UI.
     * If no value is provided (`auto`), the end date is automatically calculated to fill the chart width based on the visible timeline.
     * If a specific date is provided, the timeline ends at this date and remains fixed.
     *
     * @default 'auto'
     */
    viewEndDate?: Date | string | 'auto';

}