import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, ManyToOne, JoinColumn, Index } from 'typeorm';
import { Campaign } from './campaign.entity';
import { CampaignInfluencer } from './campaign_influencer.entity';

@Entity('campaign_ai_reports')
@Index('IDX_campaign_ai_report_campaign', ['campaign'])
@Index('IDX_campaign_ai_report_campaign_influencer', ['campaign_influencer'])
@Index('UQ_campaign_ai_report_influencer_number', ['campaign_influencer', 'report_number'], { unique: true })
export class CampaignAiReport {
    @PrimaryGeneratedColumn('uuid')
    id: string;

    @ManyToOne(() => Campaign, (campaign) => campaign.campaignAiReports, { onDelete: 'CASCADE' })
    @JoinColumn({ name: 'campaign_id' })
    campaign: Campaign;

    @ManyToOne(() => CampaignInfluencer, (campaignInfluencer) => campaignInfluencer.campaignAiReports, { onDelete: 'CASCADE' })
    @JoinColumn({ name: 'campaign_influencer_id' })
    campaign_influencer: CampaignInfluencer;

    @Column({ name: 'report_number', type: 'varchar', length: 50 })
    report_number: string;

    @Column({ name: 'response_json', type: 'jsonb', nullable: true })
    response_json: Record<string, any>;

    @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;
}
