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

export enum DeviationSeveridad {
  INFORMATIVO = "informativo", // columna del ERP mas grande de lo necesario — inocuo
  ADVERTENCIA = "advertencia", // columna mas chica — trunca en silencio o falla en modo estricto
  GRAVE = "grave", // tipo incompatible — falla al primer insert
}

// Una desviacion de columna (tipo/tamano distinto al esperado) que un
// operador decidio omitir al dar de alta un tenant. Registrarla evita que el
// chequeo de compatibilidad vuelva a insistir con lo mismo en cada alta, y
// deja constancia de que la diferencia se acepto a proposito.
@Entity("schema_deviations")
export class SchemaDeviation {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ name: "tenant_id" })
  @Index()
  tenantId: number;

  @Column({ name: "tabla", length: 128 })
  tabla: string;

  @Column({ name: "columna", length: 128 })
  columna: string;

  @Column({ type: "enum", enum: DeviationSeveridad })
  severidad: DeviationSeveridad;

  @Column({ name: "tipo_esperado", length: 128 })
  tipoEsperado: string;

  @Column({ name: "tipo_real", length: 128 })
  tipoReal: string;

  @Column({ name: "alter_sugerido", type: "text" })
  alterSugerido: string;

  @Column({ name: "omitido_por_identidad_id", type: "int" })
  omitidoPorIdentidadId: number;

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