import {
  Column,
  CreateDateColumn,
  Entity,
  Index,
  JoinColumn,
  ManyToOne,
  PrimaryGeneratedColumn,
} from 'typeorm';

import { Document } from './document.entity';

/**
 * Short-lived OTPs — one live row per (user, document).
 * The OTP itself is never stored in plain text — only the bcrypt hash.
 */
@Entity('document_otps')
@Index(['document_id', 'user_id'])
export class DocumentOtp {
  @PrimaryGeneratedColumn({ type: 'bigint', unsigned: true })
  id: number;

  @Column({ type: 'bigint', unsigned: true })
  document_id: number;

  @ManyToOne(() => Document, { onDelete: 'CASCADE' })
  @JoinColumn({ name: 'document_id' })
  document: Document;

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

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

  @Column({ type: 'datetime' })
  expires_at: Date;

  @Column({ type: 'tinyint', width: 1, default: 0 })
  consumed: number;

  @Column({ type: 'int', default: 0 })
  attempts: number;

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