import { Entity, PrimaryGeneratedColumn, ManyToOne, JoinColumn, CreateDateColumn, UpdateDateColumn, Column, OneToMany, DeleteDateColumn, Collection } from "typeorm"
import { Campaign } from "./campaign.entity"
import { Users } from "./users.entity"
import { DraftVersions } from "./draft_versions.entity"
import { DraftComments } from "./draft_comments.entity"
import { CampaignInfluencer } from "./campaign_influencer.entity"

export enum DraftStatus {
    APPROVED = "approved",
    PENDING = "pending",
    REJECTED = "rejected"
}


@Entity("draft")
export class Draft {
    @PrimaryGeneratedColumn("uuid")
    id: string

    @ManyToOne(() => Campaign, (campaign) => campaign.id, { onDelete: "CASCADE" })
    @JoinColumn({ name: "campaign_id" })
    campaign: Campaign

    @ManyToOne(() => Users, (influencer) => influencer.id)
    influencer: Users

    @ManyToOne(() => CampaignInfluencer, (camapignInfluencer) => camapignInfluencer.drafts, { onDelete: "CASCADE" })
    @JoinColumn({ name: "campaign_influencer_id" })
    campaign_influencer: CampaignInfluencer

    @Column({ type: "enum", enum: DraftStatus, default: DraftStatus.PENDING })
    status: DraftStatus

    @Column({ name: "comment_count", type: "integer", default: 0 })
    comment_count: number

    @Column({ type: 'boolean', default: false })
    is_draft_seen: boolean;

    @OneToMany(() => DraftVersions, (draftVersions) => draftVersions.draft)
    draftVersions: DraftVersions[];

    @OneToMany(() => DraftComments, (draftComments) => draftComments.draft)
    draftComments: DraftComments[];


    @CreateDateColumn({
        type: 'timestamp',
        precision: 0,
        default: () => 'CURRENT_TIMESTAMP',
    })
    created_at: Date;

    @UpdateDateColumn({
        type: 'timestamp',
        precision: 0,
        default: () => 'CURRENT_TIMESTAMP',
        onUpdate: 'CURRENT_TIMESTAMP',
    })
    updated_at: Date;

    @DeleteDateColumn({ type: 'timestamp', nullable: true, precision: 0 })
    deleted_at: Date;

}
