"use client";

import { useRouter, useSearchParams } from "next/navigation";
import { useParams } from "@/lib/route-params";
import { useCallback, useEffect, useState } from "react";
import {
  AssignmentEditorForm,
  type AssignmentEditPayload,
} from "@/components/teacher/AssignmentEditorForm";
import { TeacherShell } from "@/components/teacher/TeacherShell";
import { Alert } from "@/components/ui/Alert";
import { PageContentSkeleton } from "@/components/ui/Skeleton";
import { ApiError, apiGet } from "@/lib/api";

export default function EditClassAssignmentPage() {
  const { classId, assignmentId } = useParams<{ classId: string; assignmentId: string }>();
  const router = useRouter();
  const searchParams = useSearchParams();
  const classRoomId = Number(classId);
  const subjectId = searchParams.get("subject_id");
  const scheduleId = searchParams.get("schedule_id");

  const [assignment, setAssignment] = useState<AssignmentEditPayload | null>(null);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState<string | null>(null);

  const backUrl = () => {
    const params = new URLSearchParams({ tab: "assignments" });
    if (subjectId) params.set("subject_id", subjectId);
    if (scheduleId) params.set("schedule_id", scheduleId);
    return `/teacher/classes/${classRoomId}?${params.toString()}`;
  };

  const load = useCallback(async () => {
    setLoading(true);
    setError(null);
    try {
      const data = await apiGet<AssignmentEditPayload & { category?: string | null }>(
        `/assignments/${assignmentId}`,
      );
      setAssignment({
        id: data.id,
        title: data.title,
        instructions: data.instructions,
        max_score: data.max_score,
        category: data.category,
      });
    } catch (err) {
      setError(err instanceof ApiError ? err.message : "خطا در بارگذاری تکلیف");
    } finally {
      setLoading(false);
    }
  }, [assignmentId]);

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

  return (
    <TeacherShell
      title="ویرایش تکلیف"
      subtitle="ویرایش تکلیف چندمرحله‌ای"
      showBack
      breadcrumbLabels={{ assignment: assignment?.title }}
    >
      {error ? <Alert tone="error">{error}</Alert> : null}
      {loading ? (
        <PageContentSkeleton rows={6} />
      ) : assignment ? (
        <AssignmentEditorForm
          classRoomId={classRoomId}
          subjectId={subjectId ? Number(subjectId) : null}
          assignment={assignment}
          onCancel={() => router.push(backUrl())}
          onSaved={() => router.push(backUrl())}
        />
      ) : (
        <p className="text-sm text-[var(--muted)]">تکلیف یافت نشد.</p>
      )}
    </TeacherShell>
  );
}
