// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.

import {Relation} from '@nozbe/watermelondb';
import {field, immutableRelation} from '@nozbe/watermelondb/decorators';
import Model, {Associations} from '@nozbe/watermelondb/Model';

import {MM_TABLES} from '@constants/database';

import type PostModel from '@typings/database/models/servers/post';
import type PostsInThreadModelInterface from '@typings/database/models/servers/posts_in_thread';

const {POST, POSTS_IN_THREAD} = MM_TABLES.SERVER;

/**
 * PostsInThread model helps us to combine adjacent threads together without leaving
 * gaps in between for an efficient user reading experience for threads.
 */
export default class PostsInThreadModel extends Model implements PostsInThreadModelInterface {
    /** table (name) : PostsInThread */
    static table = POSTS_IN_THREAD;

    /** associations : Describes every relationship to this table. */
    static associations: Associations = {

        /** A POST can have multiple POSTS_IN_THREAD. (relationship is 1:N)*/
        [POST]: {type: 'belongs_to', key: 'root_id'},
    };

    /** root_id: Associated root post identifier */
    @field('root_id') rootId!: string;

    /** earliest : Lower bound of a timestamp range */
    @field('earliest') earliest!: number;

    /** latest : Upper bound of a timestamp range */
    @field('latest') latest!: number;

    /** post : The related record to the parent Post model */
    @immutableRelation(POST, 'root_id') post!: Relation<PostModel>;
}
