import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, OneToMany } from 'typeorm';
import { CaseEntry } from '../case-entries/case-entry.entity';

@Entity({ name: 'cases' })
export class Case {
  @PrimaryGeneratedColumn({ type: 'bigint' })
  id!: number;

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

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

  @Column({ type: 'varchar', length: 128, nullable: true })
  patientCode?: string;

  @Column({ type: 'int', nullable: true })
  age?: number;

  @Column({ type: 'varchar', length: 16, nullable: true })
  sex?: string;

  @Column({ type: 'json', nullable: true })
  meta?: Record<string, any>;

  @Column({
    type: 'enum',
    enum: ['DRAFT', 'IN_REVIEW', 'PUBLISHED', 'ARCHIVED'],
    default: 'DRAFT',
  })
  status!: string;

  /** Set when a learner created the case from the mobile app. */
  @Column({ type: 'varchar', length: 128, nullable: true })
  anonymousSessionId?: string;

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

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

  @OneToMany(() => CaseEntry, (entry) => entry.case)
  entries?: CaseEntry[];
}
