import {
  Entity,
  PrimaryGeneratedColumn,
  Column,
  ManyToOne,
  JoinColumn,
  CreateDateColumn,
  UpdateDateColumn,
} from 'typeorm';
import { CompanyAudit } from '../../company-audits/entities/company-audit.entity';
import { User } from './../../user/entities/user.entity';

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

@Entity('company_audit_stages')
export class CompanyAuditStage {
  @PrimaryGeneratedColumn()
  id: number;

  @ManyToOne(() => CompanyAudit, (audit) => audit.stages, {
    onDelete: 'CASCADE',
  })
  @JoinColumn({ name: 'audit_id' })
  audit: CompanyAudit;

  @Column({
    name: 'stage_name',
    type: 'enum',
    enum: AuditStageName,
  })
  stageName: AuditStageName; // dropdown choices

  @Column({ name: 'audit_date', type: 'date', nullable: true })
  auditDate: Date;

  @ManyToOne(() => User, { nullable: false })
  @JoinColumn({ name: 'audit_by' })
  auditBy: User;

  @Column({ name: 'technical_expert', length: 150, nullable: true })
  technicalExpert: string;

  @Column({ name: 'anzic_code', length: 50, nullable: true })
  anzicCode: string;

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

  @ManyToOne(() => User, { nullable: false })
  @JoinColumn({ name: 'created_by' })
  createdBy: User;

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

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