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

@Entity('pes_sending_profiles')
export class PesSendingProfile {
  @PrimaryGeneratedColumn('uuid')
  id: string;

  @Column({ type: 'varchar', length: 100, unique: true, name: 'profile_id' })
  profileId: string;

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

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

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

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

  @Column({
    type: 'enum',
    enum: SendingProfileType,
    default: SendingProfileType.SYSTEM_DEFAULT,
    name: 'profile_type',
  })
  profileType: SendingProfileType;

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

  @Column({ type: 'int', nullable: true, name: 'smtp_port' })
  smtpPort: number;

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

  @Column({ type: 'text', nullable: true, name: 'smtp_password' })
  smtpPassword: string; // Should be encrypted

  @Column({ type: 'boolean', default: false, name: 'smtp_tls' })
  smtpTls: boolean;

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

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

  @Column({ type: 'boolean', default: false, name: 'is_default' })
  isDefault: boolean;

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

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

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

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

  // Relations
  @ManyToOne(() => PesVerifiedUsers, user => user.sendingProfiles)
  @JoinColumn({ name: 'verified_user', referencedColumnName: 'id' })
  verifeidUser: PesVerifiedUsers;

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