import Model from '@nozbe/watermelondb/Model';
import { MarkdownAST } from '@rocket.chat/message-parser';

import { IAttachment } from './IAttachment';
import { IEditedBy, IUserChannel, IUserMention, IUserMessage } from './IMessage';
import { IReaction } from './IReaction';
import { SubscriptionType } from './ISubscription';

export interface IUrl {
	title: string;
	description: string;
	image: string;
	url: string;
}

interface IFileThread {
	_id: string;
	name: string;
	type: string;
}

export interface IThreadResult {
	_id: string;
	rid: string;
	ts: string;
	msg: string;
	file?: IFileThread;
	files?: IFileThread[];
	groupable?: boolean;
	attachments?: IAttachment[];
	md?: MarkdownAST;
	u: IUserMessage;
	_updatedAt: string;
	urls: IUrl[];
	mentions: IUserMention[];
	channels: IUserChannel[];
	replies: string[];
	tcount: number;
	tlm: string;
}

export interface IThread {
	id: string;
	msg?: string;
	t?: SubscriptionType;
	rid?: string;
	_updatedAt?: Date;
	ts?: Date;
	u?: IUserMessage;
	alias?: string;
	parseUrls?: boolean;
	groupable?: boolean;
	avatar?: string;
	emoji?: string;
	attachments?: IAttachment[];
	urls?: IUrl[];
	status?: number;
	pinned?: boolean;
	starred?: boolean;
	editedBy?: IEditedBy;
	reactions?: IReaction[];
	role?: string;
	drid?: string;
	dcount?: number;
	dlm?: number;
	tmid?: string;
	tcount: number | string;
	tlm?: string;
	replies?: string[];
	mentions?: IUserMention[];
	channels?: IUserChannel[];
	unread?: boolean;
	autoTranslate?: boolean;
	translations?: any;
	e2e?: string;
}

export type TThreadModel = IThread & Model;