export interface OnfleetRecipient {
	name?: string;
	phone?: string;
	notes?: string;
	skipSMSNotifications?: boolean;
	skipPhoneNumberValidation?: boolean;
}

export interface OnfleetDestinationAddress {
	name?: string;
	number?: string;
	street?: string;
	apartment?: string;
	city?: string;
	state?: string;
	postalCode?: string;
	country?: string;
	unparsed?: string;
}

export interface OnfleetDestinationOptions {
	language?: string;
}

export interface OnfleetDestination {
	address: OnfleetDestinationAddress;
	location?: [number, number];
	notes?: string;
	options?: OnfleetDestinationOptions;
}

export interface OnfleetTask {
	merchant?: string;
	executor?: string;
	destination: OnfleetDestination;
	recipients: OnfleetRecipient[];
	completeAfter?: number;
	completeBefore?: number;
	pickupTask?: boolean;
	notes?: string;
	quantity?: number;
	serviceTime?: number;
}

export interface OnfleetTaskUpdate {
	merchant?: string;
	executor?: string;
	completeAfter?: number;
	completeBefore?: number;
	pickupTask?: boolean;
	notes?: string;
	quantity?: number;
	serviceTime?: number;
}

export interface OnfleetListTaskFilters {
	from?: number;
	to?: number;
	lastId?: string;
	state?: string;
	worker?: string;
	completeBeforeBefore?: number;
	completeAfterAfter?: number;
	dependencies?: string;
}

export interface OnfleetCloneOverrideTaskOptions {
	completeAfter?: number;
	completeBefore?: number;
	destination?: OnfleetDestination;
	notes?: string;
	pickupTask?: boolean;
	recipients?: OnfleetRecipient[];
	serviceTime?: number;
}

export interface OnfleetCloneTaskOptions {
	includeMetadata?: boolean;
	includeBarcodes?: boolean;
	includeDependencies?: boolean;
	overrides?: OnfleetCloneOverrideTaskOptions;
}

export interface OnfleetCloneTask {
	options?: OnfleetCloneTaskOptions;
}

export interface OnfleetTaskCompletionDetails {
	success: boolean;
	notes?: string;
}

export interface OnfleetTaskComplete {
	completionDetails: OnfleetTaskCompletionDetails;
}

export interface OnfleetAdmins {
	name?: string;
	email?: string;
	phone?: string;
	isReadOnly?: boolean;
}

export interface OnfleetHubs extends OnfleetDestination {
	name?: string;
	teams?: string[];
}

export interface OnfleetVehicle {
	type?: string;
	description?: string;
	licensePlate?: string;
	color?: string;
}

export interface OnfleetWorker {
	name?: string;
	phone?: string;
	vehicle?: OnfleetVehicle;
	teams?: string[];
	capacity?: number;
	displayName?: string;
}

export interface OnfleetWorkerFilter {
	[key: string]: string | undefined;
	filter?: string;
	teams?: string;
	states?: string;
	phones?: string;
	analytics?: string;
}

export interface OnfleetWorkerScheduleEntry {
	date?: string;
	timezone?: string;
	shifts?: [[number, number]];
}

export interface OnfleetWebhook {
	url?: string;
	name?: string;
	trigger?: number;
	threshold?: number;
}

export interface OnfleetTeams {
	name?: string;
	workers?: string[];
	managers?: string[];
	hub?: string;
	enableSelfAssignment?: boolean;
}

export interface OnfleetWorkerSchedule {
	entries: OnfleetWorkerScheduleEntry[];
}

export interface OnfleetWebhookMapping {
	key: number;
	name: string;
	value: string;
}

export interface OnfleetWebhooksMapping {
	[key: string]: OnfleetWebhookMapping;
}

export interface OnfleetWorkerEstimates {
	dropoffLocation?: string;
	pickupLocation?: string;
	pickupTime?: number;
	restrictedVehicleTypes?: string;
	serviceTime?: number;
}

export interface OnfleetTeamAutoDispatch {
	maxTasksPerRoute?: number;
	taskTimeWindow?: [number, number];
	scheduleTimeWindow?: [number, number];
	serviceTime?: number;
	routeEnd?: string;
	maxAllowedDelay?: number;
}