import mongoose, { Schema, models, model } from "mongoose";

// Audit-Log für Zugriffe auf hochsensible Personaldaten (IBAN/SV-Nr./
// Steuer-ID, Personalsystem 24.09.2026) - Sicherheitsanforderung: wer hat
// wann auf wessen Daten zugegriffen/sie geändert. "viewed" wird nur
// protokolliert, wenn jemand ANDERES als die betroffene Person selbst die
// Daten ansieht (das eigene Ansehen der eigenen Daten ist kein
// Audit-relevanter "Zugriff" im Sinne der Privatsphäre der Person) -
// "edited" dagegen immer, auch bei einer Selbstbearbeitung.
export interface SensitiveDataAccessLogDoc {
  _id: string;
  clientId: mongoose.Types.ObjectId; // wessen Daten betroffen sind
  accessedByClientId: mongoose.Types.ObjectId; // wer zugegriffen hat
  action: "viewed" | "edited";
  createdAt: Date;
}

const sensitiveDataAccessLogSchema = new Schema<SensitiveDataAccessLogDoc>(
  {
    clientId: { type: Schema.Types.ObjectId, ref: "Client", required: true, index: true },
    accessedByClientId: { type: Schema.Types.ObjectId, ref: "Client", required: true },
    action: { type: String, enum: ["viewed", "edited"], required: true },
  },
  { timestamps: { createdAt: true, updatedAt: false } }
);

export const SensitiveDataAccessLog =
  (models.SensitiveDataAccessLog as mongoose.Model<SensitiveDataAccessLogDoc>) ||
  model<SensitiveDataAccessLogDoc>("SensitiveDataAccessLog", sensitiveDataAccessLogSchema);
