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 { DisputeHistory } from "./dispute-history.entity"

export enum Winner {
    BRAND= "brand",
    INFLUENCER="influencer" 
}

export enum DispuetStatus {
    SOLVED= "solved",
    UNSOLVED="unsolved" 
}



@Entity("dispute")
export class Dispute {
    @PrimaryGeneratedColumn("uuid")
    id: string

    @ManyToOne(() => Users, (influencer) => influencer.id)
    @JoinColumn({ name: "influencer_id" })
    influencer: Users

    @ManyToOne(() => Users, (brand) => brand.id)
    @JoinColumn({ name: "brand_id" })
    brand: Users

    @Column({ type: "varchar", length: 255 })
    slug: string

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

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

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

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

    @Column({ type: "enum", enum: Winner,nullable:true})
    winner: Winner

    @Column({ type: "enum", enum: DispuetStatus,nullable:true})
    status: DispuetStatus
    
    @Column({ type: 'text', default: "" })
    message: string;

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

    @OneToMany(() => DisputeHistory, (disputeHistory) => disputeHistory.dispute)
    disputeHistory: DisputeHistory[];
  
    @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;
   
}
