import {
  Entity,
  PrimaryGeneratedColumn,
  Column,
  CreateDateColumn,
  UpdateDateColumn,
  OneToMany,
} from 'typeorm';
import { TemplateContent } from './../../template_contents/entities/template_content.entity';
import { Job } from 'src/jobs/entities/job.entity';

export enum TemplateType {
  DOCUMENT = 'DOCUMENT',
  CERTIFICATE = 'CERTIFICATE',
}

export enum AuditStageName {
  STAGE1 = 'Stage 1',
  STAGE2 = 'Stage 2',
  SURVEILLANCE = 'Surveillance',
  RECERTIFICATION = 'Recertification',
}

@Entity({ name: 'templates' })
export class Template {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ nullable: false })
  name: string;

  @Column({
    name: 'stage_name',
    type: 'enum',
    enum: AuditStageName,
    nullable: false,
  })
  stageName: AuditStageName;

   @Column({
    name: 'template_type',
    type: 'enum',
    enum: TemplateType,
    default: TemplateType.DOCUMENT,
  })
  templateType: TemplateType;

  @Column({ nullable: false })
  version: string;

  @Column({ name: 'file_path', nullable: false })
  filePath: string;

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

  @Column({ name: 'created_by', nullable: true })
  createdBy: number;

  @OneToMany(() => TemplateContent, (content) => content.template)
  contents: TemplateContent[];
  

  @OneToMany(() => Job, (job) => job.template)
  jobs: Job[];

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

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