"use client";

import { useRouter } from "next/navigation";
import { useEffect, type ReactNode } from "react";
import { PageContentSkeleton } from "@/components/ui/Skeleton";
import {
  canAccessAcademicAdmin,
  canAccessSchoolSetup,
  canManageStudents,
  isTeacherRole,
} from "@/lib/permissions";

export function RequireStudentManage({ children }: { children: ReactNode }) {
  const router = useRouter();
  const allowed = canManageStudents();

  useEffect(() => {
    if (!allowed) router.replace("/students");
  }, [allowed, router]);

  if (!allowed) {
    return <PageContentSkeleton rows={4} />;
  }

  return <>{children}</>;
}

export function RequireAcademicAdmin({ children }: { children: ReactNode }) {
  const router = useRouter();
  const allowed = canAccessAcademicAdmin();

  useEffect(() => {
    if (!allowed) router.replace("/academic/report-cards");
  }, [allowed, router]);

  if (!allowed) {
    return <PageContentSkeleton rows={4} />;
  }

  return <>{children}</>;
}

export function RequireSchoolSetup({ children }: { children: ReactNode }) {
  const router = useRouter();
  const allowed = canAccessSchoolSetup();

  useEffect(() => {
    if (!allowed) router.replace("/dashboard");
  }, [allowed, router]);

  if (!allowed) {
    return <PageContentSkeleton rows={4} />;
  }

  return <>{children}</>;
}

export function TeacherHomeRedirect({ children }: { children: ReactNode }) {
  const router = useRouter();
  useEffect(() => {
    if (isTeacherRole()) {
      // no-op helper for pages that want custom behavior
    }
  }, [router]);
  return <>{children}</>;
}
