import { connectDB } from "@/lib/db";
import { Department } from "@/models/Department";
import { Position } from "@/models/Position";
import { Team } from "@/models/Team";
import { Client } from "@/models/Client";
import { TeamActivity } from "@/models/TeamActivity";

// Extrahiert aus admin/team/page.tsx — Abteilungen/Positionen/Teams/
// Mitarbeiter-Zuordnung + Aktivitätsprotokoll. Personalakte (Beschäftigungs-
// historie, Onboarding-Checkliste, generierte Dokumente) bleibt bewusst
// Web-only, siehe Phase-Entscheidung.
export async function getTeamManagementData() {
  await connectDB();
  const [departments, positions, teams, staff, activity] = await Promise.all([
    Department.find({}).sort({ sortOrder: 1 }).lean(),
    Position.find({}).sort({ sortOrder: 1 }).lean(),
    Team.find({}).sort({ sortOrder: 1 }).lean(),
    Client.find({ role: "staff" }).sort({ name: 1 }).lean(),
    TeamActivity.find({}).sort({ createdAt: -1 }).limit(30).lean(),
  ]);

  return {
    departments: departments.map((d) => ({ _id: String(d._id), name: d.name, color: d.color })),
    positions: positions.map((p) => ({
      _id: String(p._id),
      name: p.name,
      departmentId: p.departmentId ? String(p.departmentId) : null,
      permissions: p.permissions,
    })),
    teams: teams.map((t) => ({ _id: String(t._id), name: t.name, color: t.color })),
    staff: staff.map((s) => ({
      _id: String(s._id),
      name: s.name,
      email: s.email,
      avatarPath: s.avatarPath || "",
      departmentId: s.departmentId ? String(s.departmentId) : null,
      positionId: s.positionId ? String(s.positionId) : null,
      teamIds: (s.teamIds || []).map(String),
    })),
    activity: activity.map((a) => ({
      _id: String(a._id),
      action: a.action,
      targetLabel: a.targetLabel,
      actorName: a.actorName,
      createdAt: new Date(a.createdAt).toISOString(),
    })),
  };
}
