"use client";

import Link from "next/link";
import { useCallback, useEffect, useState } from "react";
import { Alert } from "@/components/ui/Alert";
import { apiGet } from "@/lib/api";

interface ContextPayload {
  pending_assignments: Array<{
    assignment_id: number;
    title: string;
    ungraded_count: number;
  }>;
  today_assessments: Array<{ id: number; title: string; scope: string }>;
  previous_log?: { log_date?: string; topic?: string; homework_note?: string } | null;
}

export function ClassContextAlerts({
  classRoomId,
  subjectId,
  date,
}: {
  classRoomId: number;
  subjectId?: number | null;
  date?: string;
}) {
  const [data, setData] = useState<ContextPayload | null>(null);

  const load = useCallback(async () => {
    try {
      const params = new URLSearchParams();
      if (subjectId) params.set("subject_id", String(subjectId));
      if (date) params.set("date", date);
      const qs = params.toString();
      const payload = await apiGet<ContextPayload>(
        `/teacher/classes/${classRoomId}/context${qs ? `?${qs}` : ""}`,
      );
      setData(payload);
    } catch {
      setData(null);
    }
  }, [classRoomId, subjectId, date]);

  useEffect(() => {
    void load();
  }, [load]);

  if (!data) return null;

  const hasAlerts =
    data.pending_assignments.length > 0 ||
    data.today_assessments.length > 0 ||
    Boolean(data.previous_log?.homework_note);

  if (!hasAlerts) return null;

  return (
    <div className="space-y-2">
      {data.today_assessments.map((a) => (
        <Alert key={a.id} tone="info">
          ارزیابی امروز: <strong>{a.title}</strong>
          {" · "}
          <Link href={`/teacher/classes/${classRoomId}?tab=grades`} className="underline">
            ثبت نمره
          </Link>
        </Alert>
      ))}
      {data.pending_assignments.map((a) => (
        <Alert key={a.assignment_id} tone="warning">
          {a.ungraded_count} تکلیف «{a.title}» در انتظار تصحیح
          {" · "}
          <Link href={`/teacher/classes/${classRoomId}?tab=assignments`} className="underline">
            مشاهده
          </Link>
        </Alert>
      ))}
      {data.previous_log?.homework_note ? (
        <Alert tone="info">
          یادداشت جلسه قبل ({data.previous_log.log_date}): {data.previous_log.homework_note}
        </Alert>
      ) : null}
    </div>
  );
}
