import Link from "next/link";
import { requireSession } from "@/lib/auth";
import { buildWeeklySummary } from "@/lib/weekly";
import { weekStart, today } from "@/lib/period";
import { formatDate } from "@/lib/format";
import { PageHeader } from "@/components/ui";
import { WeeklySummaryView } from "@/components/weekly-summary";
import { WeeklySummaryForm } from "./summary-form";

export const dynamic = "force-dynamic";

/**
 * Màn hình NVKD chốt tổng kết tuần (yêu cầu mục 3).
 *
 * Phần trên là các con số hệ thống tự tính, phần dưới là ô nhập nhận định. Người
 * dùng nhìn thấy số trước khi viết nhận định, nên nhận định bám vào số liệu thật.
 */
export default async function WeekClosePage({
  searchParams,
}: {
  searchParams: Promise<{ tuan?: string }>;
}) {
  const session = await requireSession();
  const params = await searchParams;
  const monday = weekStart(params.tuan || today());

  const data = await buildWeeklySummary(session.tenantId, session.userId, monday);
  const previousMonday = weekStart(
    new Date(Date.parse(`${monday}T00:00:00Z`) - 7 * 86_400_000).toISOString().slice(0, 10),
  );

  return (
    <>
      <PageHeader
        title="Tổng kết tuần"
        subtitle={`${formatDate(data.days[0])} – ${formatDate(data.days[6])} · ${session.fullName}`}
        actions={
          <>
            <Link href={`/cong-viec/chot-tuan?tuan=${previousMonday}`} className="btn-ghost">
              ← Tuần trước
            </Link>
            <Link href="/cong-viec" className="btn-ghost">
              Xem lộ trình
            </Link>
          </>
        }
      />

      <div className="flex flex-col gap-5">
        <WeeklySummaryView data={data} />

        <div>
          <h2 className="mb-3 text-base font-bold text-ink-700">Chốt tuần</h2>
          <WeeklySummaryForm
            weekStart={monday}
            objective={data.objective}
            summary={data.summary}
            nextWeekObjective={data.nextWeekObjective}
            weekLabel={`${formatDate(data.days[0])} – ${formatDate(data.days[6])}`}
          />
        </div>
      </div>
    </>
  );
}
