import {
  Entity,
  PrimaryGeneratedColumn,
  Column,
  ManyToOne,
  JoinColumn,
  CreateDateColumn,
  Index,
} from 'typeorm';
import { AuditChecklistItem } from './audit-checklist-item.entity';
import { User } from '../../user/entities/user.entity';

export enum ChecklistHistoryAction {
  UPLOADED = 'uploaded',
  APPROVED = 'approved',
  REJECTED = 'rejected',
}

@Entity({ name: 'checklist_item_history' })
export class ChecklistItemHistory {
  @PrimaryGeneratedColumn()
  id: number;

  @Index()
  @Column({ type: 'int' })
  audit_checklist_item_id: number;

  @ManyToOne(() => AuditChecklistItem, (item) => item.history, {
    onDelete: 'CASCADE',
  })
  @JoinColumn({ name: 'audit_checklist_item_id' })
  audit_checklist_item: AuditChecklistItem;

  @Column({ type: 'enum', enum: ChecklistHistoryAction })
  action: ChecklistHistoryAction;

  @Column({ type: 'varchar', length: 500, nullable: true })
  document_path: string | null;

  @Column({ type: 'varchar', length: 255, nullable: true })
  document_original_name: string | null;

  @Column({ type: 'text', nullable: true })
  note: string | null;

  @Column({ type: 'int', nullable: true })
  performed_by: number | null;

  @ManyToOne(() => User, { nullable: true })
  @JoinColumn({ name: 'performed_by' })
  performed_by_user: User | null;

  @CreateDateColumn()
  performed_at: Date;
}
