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

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

/**
 * A document is assigned to one or more ROLES (Auditor / Marketing / Coordinator / Admin).
 * Any user holding that role automatically gets access — no per-user assignment.
 */
@Entity('document_role_assignments')
@Unique('uniq_doc_role', ['document_id', 'role_id'])
@Index(['role_id'])
export class DocumentRoleAssignment {
  @PrimaryGeneratedColumn({ type: 'bigint', unsigned: true })
  id: number;

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

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

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

  // Denormalised snapshot so we don't need to join to `roles` for listings.
  @Column({ type: 'varchar', length: 80, nullable: true })
  role_name: string | null;

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

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