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"
import { SocialMedias } from "./social-medias.entity"

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


@Entity("posts")
export class Posts {
    @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: PostStatus, default: PostStatus.PENDING })
    status: PostStatus

    @Column({ type: "text", nullable: true })
    post_link: number

    @Column({ type: "text", nullable: true })
    image_link: string

    @ManyToOne(() => SocialMedias, (social_media) => social_media.id)
    @JoinColumn({ name: "social_media_id" })
    social_media: SocialMedias
   
    @Column({ type: 'bigint', default: 0 })
    view_counts: string;

    @Column({ type: 'bigint', default: 0 })
    like_counts: string;

    @Column({ type: 'bigint', default: 0 })
    comment_count: string;

    @Column({ type: 'decimal', precision: 10, scale: 2,default:0.00 })
    engagement_rate: number;

    @Column({ nullable: true })
    social_post_id: string;

    @Column({ nullable: true })
    platform: string;

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

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

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

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