import { NextRequest, NextResponse } from "next/server";
import { db } from "@/lib/db";
import { requirePageRole, resolveSchoolId, ApiError } from "@/lib/auth";
import { logAudit } from "@/lib/audit";
import { handleApiError } from "@/lib/api-helpers";

/** تنبيهات الإدارة - تظهر في لوحة المعلومات (نطاق المدرسة) */
export async function GET(req: NextRequest) {
  try {
    const viewer = await requirePageRole("dashboard", "ADMIN", "ACCOUNTANT", "STAFF");
    const schoolId = await resolveSchoolId(viewer, req.nextUrl.searchParams.get("schoolId"));
    const announcements = await db.announcement.findMany({
      where: { schoolId },
      orderBy: { createdAt: "desc" },
      take: 20,
      include: { creator: { select: { fullName: true } } },
    });
    return NextResponse.json({ announcements });
  } catch (err) {
    return handleApiError(err);
  }
}

export async function POST(req: NextRequest) {
  try {
    const user = await requirePageRole("dashboard", "ADMIN", "SUPER_ADMIN");
    const schoolId = await resolveSchoolId(user, req.nextUrl.searchParams.get("schoolId"));
    const body = await req.json();
    const { message, level } = body as { message?: string; level?: string };
    if (!message || String(message).trim().length < 3) {
      throw new ApiError("نص التنبيه مطلوب (3 أحرف على الأقل)", 400);
    }
    const announcement = await db.announcement.create({
      data: {
        message: String(message).trim(),
        level: level === "WARNING" || level === "URGENT" ? level : "INFO",
        createdById: user.id,
        schoolId,
      },
      include: { creator: { select: { fullName: true } } },
    });
    await logAudit(user, {
      action: "CREATE",
      entity: "Announcement",
      entityId: announcement.id,
      details: `نشر تنبيه إداري: ${announcement.message}`,
    });
    return NextResponse.json({ announcement }, { status: 201 });
  } catch (err) {
    return handleApiError(err);
  }
}

/** إلغاء تنبيه */
export async function DELETE(req: NextRequest) {
  try {
    const user = await requirePageRole("dashboard", "ADMIN", "SUPER_ADMIN");
    const schoolId = await resolveSchoolId(user, req.nextUrl.searchParams.get("schoolId"));
    const { searchParams } = new URL(req.url);
    const id = searchParams.get("id");
    if (!id) throw new ApiError("معرف التنبيه مطلوب", 400);
    const announcement = await db.announcement.findUnique({ where: { id } });
    if (!announcement || announcement.schoolId !== schoolId) throw new ApiError("التنبيه غير موجود", 404);
    await db.announcement.delete({ where: { id } });
    await logAudit(user, {
      action: "DELETE",
      entity: "Announcement",
      entityId: id,
      details: `إلغاء تنبيه إداري: ${announcement.message}`,
    });
    return NextResponse.json({ ok: true });
  } catch (err) {
    return handleApiError(err);
  }
}
