import type { Metadata } from "next";
import { requirePermission } from "@/lib/auth/session";
import { getCalendarMonth } from "@/lib/calendar/queries";
import { getMeetings, getMeetingUsers, getMeetingTeams } from "@/lib/meetings/queries";
import { PageHeader } from "@/components/ui/PageHeader";
import { CalendarView } from "./CalendarView";

export const metadata: Metadata = { title: "Kalender & Termine" };

export default async function CalendarPage({
  searchParams,
}: {
  searchParams: Promise<{ m?: string }>;
}) {
  const session = await requirePermission("calendar.view");
  const perms = session.user.permissions ?? [];
  const canCreate = perms.includes("meetings.create") || perms.includes("meetings.manage");
  const canManageAll = perms.includes("meetings.manage");
  const sp = await searchParams;

  const now = new Date();
  const match = /^(\d{4})-(\d{1,2})$/.exec(sp.m ?? "");
  const year = match ? Number(match[1]) : now.getFullYear();
  const month = match ? Math.min(11, Math.max(0, Number(match[2]) - 1)) : now.getMonth();

  const [events, meetings, users, teams] = await Promise.all([
    getCalendarMonth(session.user.id, year, month),
    getMeetings(session.user.id),
    getMeetingUsers(),
    getMeetingTeams(),
  ]);

  return (
    <div className="flex flex-col gap-5">
      <PageHeader
        eyebrow="Planung"
        title="Kalender & Termine"
        description="Termine direkt hier planen — automatisch befüllt mit Abwesenheiten, Aufgaben-Deadlines und Meetings."
      />
      <CalendarView
        events={events}
        meetings={meetings}
        users={users}
        teams={teams}
        year={year}
        month={month}
        currentUserId={session.user.id}
        canCreate={canCreate}
        canManageAll={canManageAll}
      />
    </div>
  );
}
