import type { CronExpression } from 'n8n-workflow';

export type IRecurrenceRule =
	| { activated: false }
	| {
			activated: true;
			index: number;
			intervalSize: number;
			typeInterval: 'minutes' | 'hours' | 'days' | 'weeks' | 'months';
	  };

export type ScheduleInterval =
	| {
			field: 'cronExpression';
			expression: CronExpression;
	  }
	| {
			field: 'seconds';
			secondsInterval: number;
	  }
	| {
			field: 'minutes';
			minutesInterval: number;
	  }
	| {
			field: 'hours';
			hoursInterval: number;
			triggerAtMinute?: number;
	  }
	| {
			field: 'days';
			daysInterval: number;
			triggerAtHour?: number;
			triggerAtMinute?: number;
	  }
	| {
			field: 'weeks';
			weeksInterval: number;
			triggerAtDay: number[];
			triggerAtHour?: number;
			triggerAtMinute?: number;
	  }
	| {
			field: 'months';
			monthsInterval: number;
			triggerAtDayOfMonth?: number;
			triggerAtHour?: number;
			triggerAtMinute?: number;
	  };

export type RawScheduleInterval = Partial<{
	field: ScheduleInterval['field'];
	expression: CronExpression;
	secondsInterval: number;
	minutesInterval: number;
	hoursInterval: number;
	daysInterval: number;
	weeksInterval: number;
	monthsInterval: number;
	triggerAtDay: number[];
	triggerAtDayOfMonth: number;
	triggerAtHour: number;
	triggerAtMinute: number;
}>;

export interface Rule {
	interval: RawScheduleInterval[];
}
