/*
 * Copyright (c) 2022.
 * Author Peter Placzek (tada5hi)
 * For the full copyright and license information,
 * view the LICENSE file that was distributed with this source code.
 */

import {
    Column,
    CreateDateColumn,
    Entity, JoinColumn, ManyToOne,
    PrimaryGeneratedColumn,
    UpdateDateColumn
} from "typeorm";
import {ChatRoom} from "../room";
import {AuthUser} from "../../auth/user";
import {ChatMember} from "../member";

@Entity()
export class ChatMessage {
    @PrimaryGeneratedColumn({type: "int", unsigned: true})
    id!: number;

    @Column({type: "text"})
    content!: string;

    @Column({type: "boolean", default: false})
    encrypted!: boolean | null;

    @Column({type: "varchar", nullable: true})
    nonce!: string | null;

    @CreateDateColumn()
    created_at!: string;

    @UpdateDateColumn()
    updated_at!: string

    @Column({type: "int", unsigned: true})
    user_id!: number;

    @Column({type: "varchar"})
    room_id!: string;

    @Column({type: "varchar", nullable: true})
    member_id!: string;

    @ManyToOne(() => AuthUser, { onDelete: 'CASCADE' })
    @JoinColumn({name: 'user_id'})
    user!: AuthUser;

    @ManyToOne(() => ChatRoom, {onDelete: "CASCADE"})
    @JoinColumn({name: 'room_id'})
    room!: ChatRoom;

    @ManyToOne(() => ChatMember, { onDelete: 'SET NULL', nullable: true })
    @JoinColumn({name: 'member_id'})
    member!: ChatMember | null;
}
