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

@Entity('pes_templates')
export class PesTemplate {
  @PrimaryGeneratedColumn('uuid')
  id: string;

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

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

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

  @Column({
    type: 'enum',
    enum: TemplateCategory,
  })
  category: TemplateCategory;

  @Column({
    type: 'enum',
    enum: DifficultyLevel,
    default: DifficultyLevel.BEGINNER,
    name: 'difficulty_level',
  })
  difficultyLevel: DifficultyLevel;

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

  @Column({ type: 'text', name: 'html_content' })
  htmlContent: string;

  @Column({ type: 'text', name: 'text_content' })
  textContent: string;

  @Column({ type: 'json', nullable: true, name: 'red_flags' })
  redFlags: string[];

  @Column({ type: 'boolean', default: false, name: 'is_system_template' })
  isSystemTemplate: boolean;

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

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

  @Column({ type: 'decimal', precision: 5, scale: 2, default: 0.0, name: 'success_rate' })
  successRate: number;

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

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

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

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

  @ManyToOne(() => PesVerifiedUsers, user => user.templates, {
    nullable: false,
    onDelete: 'CASCADE',
  })
  @JoinColumn({ name: 'created_by', referencedColumnName: 'id' })
  creator: PesVerifiedUsers;

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