import {
  Column,
  CreateDateColumn,
  Entity,
  JoinColumn,
  JoinTable,
  ManyToMany,
  ManyToOne,
  OneToMany,
  PrimaryGeneratedColumn,
  UpdateDateColumn,
} from 'typeorm';
import { PesVerifiedUsers } from './pes_verified_users.entity';
import { PesCampaign } from './pes-campaign.entity';
import { PesRecipient } from './pes-recipent.entity';

@Entity('pes_recipient_groups')
export class PesRecipientGroup {
  @PrimaryGeneratedColumn('uuid')
  id: string;

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

  @Column({ type: 'text', nullable: true })
  description: string;

  @Column({ type: 'varchar', length: 100, nullable: true })
  department: string;

  @Column({ name: 'verified_user_id', type: 'uuid' })
  verifiedUserId: string;

  @ManyToMany(() => PesRecipient, recipient => recipient.groups)
  @JoinTable({
    name: 'pes_recipient_group_mappings',
    joinColumn: { name: 'group_id', referencedColumnName: 'id' },
    inverseJoinColumn: { name: 'recipient_id', referencedColumnName: 'id' },
  })
  recipients: PesRecipient[];

  @ManyToOne(() => PesVerifiedUsers, user => user.recipientGroups)
  @JoinColumn({ name: 'verified_user_id', referencedColumnName: 'id' })
  verifiedUser: PesVerifiedUsers;

  @OneToMany(() => PesCampaign, campaign => campaign.recipientGroup)
  campaigns: PesCampaign[];

  @CreateDateColumn({ type: 'timestamp', name: 'created_at' })
  createdAt: Date;

  @UpdateDateColumn({ type: 'timestamp', name: 'updated_at' })
  updatedAt: Date;
}
