import { Column, CreateDateColumn, Entity, OneToMany, PrimaryGeneratedColumn, UpdateDateColumn } from 'typeorm';
import { PesCampaign } from './pes-campaign.entity';
import { PesTemplate } from './pes-template.entity';
import { PesSendingProfile } from './pes-sending-profiles.entity';
import { PesRecipientGroup } from './pes-recepient-group.entity';

@Entity('pes_verified_users')
export class PesVerifiedUsers {
  @PrimaryGeneratedColumn('uuid')
  id: string;

  @Column({ type: 'varchar', length: 255, unique: true })
  email: string;

  @Column({ name: 'user_id', type: 'int', nullable: false })
  userId: number;

  @Column({ name: 'daily_email_count', type: 'int', default: 0 })
  dailyEmailCount: number;

  @Column({ name: 'total_email_count', type: 'int', default: 0 })
  totalEmailCount: number;

  @Column({ name: 'total_campaigns', type: 'int', default: 0 })
  totalCampaigns: number;

  @Column({ name: 'last_email_date', type: 'timestamp', nullable: true })
  lastEmailDate: Date;

  @Column({ type: 'boolean', default: true, name: 'is_active' })
  isBlocked: boolean;

  @Column({ type: 'text', nullable: true, name: 'block_reason' })
  blockReason: string;

  @Column({ type: 'timestamp', nullable: true, name: 'blocked_at' })
  blockedAt: Date;

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

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

  // Relations
  @OneToMany(() => PesCampaign, campaign => campaign.verifiedUser)
  campaigns: PesCampaign[];

  @OneToMany(() => PesTemplate, template => template.creator)
  templates: PesTemplate[];

  @OneToMany(() => PesSendingProfile, profile => profile.verifeidUser)
  sendingProfiles: PesSendingProfile[];

  @OneToMany(() => PesRecipientGroup, group => group.verifiedUser)
  recipientGroups: PesRecipientGroup[];
}
