import { Column, CreateDateColumn, Entity, Index, PrimaryGeneratedColumn } from "typeorm";

export enum AuditoriaVia {
  TENANT = "tenant",
  PLATAFORMA = "plataforma",
}

// Auditoria antes-del-acceso: se escribe ANTES de la operacion que autoriza,
// y si falla escribir, la operacion se aborta. Es el unico control sobre la
// via de plataforma (acceso directo sin membresia), asi que tiene que ser
// solida — nunca "mejor esfuerzo".
@Entity("auditoria")
export class Auditoria {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ name: "identidad_id" })
  @Index()
  identidadId: number;

  @Column({ name: "tenant_id", type: "int", nullable: true })
  @Index()
  tenantId: number | null;

  @Column({ type: "enum", enum: AuditoriaVia })
  via: AuditoriaVia;

  @Column({ length: 128 })
  @Index()
  accion: string;

  @Column({ type: "json", nullable: true })
  detalle: Record<string, unknown> | null;

  @Column({ type: "varchar", length: 64, nullable: true })
  ip: string | null;

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