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

export const enum JobStatus {
	WAITING = 'Waiting',
	INPROGRESS = 'InProgress',
	SUCCESS = 'Success',
	FAILURE = 'Failure',
	DELETED = 'Deleted',
}

export const enum TLP {
	white,
	green,
	amber,
	red,
}

export const enum ObservableDataType {
	domain = 'domain',
	file = 'file',
	filename = 'filename',
	fqdn = 'fqdn',
	hash = 'hash',
	ip = 'ip',
	mail = 'mail',
	mail_subject = 'mail_subject',
	other = 'other',
	regexp = 'regexp',
	registry = 'registry',
	uri_path = 'uri_path',
	url = 'url',
	'user-agent' = 'user-agent',
}
export interface IJob {
	id?: string;
	organization?: string;
	analyzerDefinitionId?: string;
	analyzerId?: string;
	analyzerName?: string;
	dataType?: ObservableDataType;
	status?: JobStatus;
	data?: string;
	attachment?: IDataObject;
	parameters?: IDataObject;
	message?: string;
	tlp?: TLP;
	startDate?: Date;
	endDate?: Date;
	createdAt?: Date;
	createdBy?: string;
	updatedAt?: Date;
	updatedBy?: Date;
	report?: IDataObject | string;
}
export interface IAnalyzer {
	id?: string;
	analyzerDefinitionId?: string;
	name?: string;
	version?: string;
	description?: string;
	author?: string;
	url?: string;
	license?: string;
	dataTypeList?: ObservableDataType[];
	baseConfig?: string;
	jobCache?: number;
	rate?: number;
	rateUnit?: string;
	configuration?: IDataObject;
	createdBy?: string;
	updatedAt?: Date;
	updatedBy?: Date;
}

export interface IResponder {
	id?: string;
	name?: string;
	version?: string;
	description?: string;
	dataTypeList?: string[];
	maxTlp?: number;
	maxPap?: number;
	cortexIds?: string[] | undefined;
}
