import mongoose, { Schema, models, model } from "mongoose";
import { PERMISSIONS, type Permission } from "@/lib/permissions";

export interface PositionDoc {
  _id: string;
  name: string;
  departmentId: mongoose.Types.ObjectId;
  // null = Vollzugriff (Sicherheitsnetz gegen versehentliche Selbstaussperrung,
  // z. B. für eine frisch angelegte Position); ein gesetztes Array (auch leer)
  // schränkt jeden Mitarbeiter mit dieser Position auf genau diese Rechte ein.
  permissions: Permission[] | null;
  // Standard-Stundenlohn fürs Personalsystem (24.09.2026) - hat Vorrang vor
  // Department.defaultHourlyWage, da spezifischer (z. B. "Fotograf" vs.
  // "Assistenz" in derselben Abteilung können unterschiedlich vergütet
  // werden). Siehe getEffectiveHourlyWage in lib/salary.ts.
  defaultHourlyWage: number | null;
  sortOrder: number;
  createdAt: Date;
}

const positionSchema = new Schema<PositionDoc>(
  {
    name: { type: String, required: true, trim: true, maxlength: 100 },
    departmentId: { type: Schema.Types.ObjectId, ref: "Department", required: true, index: true },
    permissions: { type: [String], enum: PERMISSIONS, default: null },
    defaultHourlyWage: { type: Number, default: null, min: 0 },
    sortOrder: { type: Number, default: 0 },
  },
  { timestamps: true }
);

export const Position =
  (models.Position as mongoose.Model<PositionDoc>) || model<PositionDoc>("Position", positionSchema);
