import { AllocationStatus } from "@capakraken/shared";
import { describe, expect, it, vi } from "vitest";
import { countEstimateHandoffPlanningEntries } from "../index.js";

describe("countEstimateHandoffPlanningEntries", () => {
  it("counts demand and assignment handoff entries", async () => {
    const result = await countEstimateHandoffPlanningEntries(
      {
        demandRequirement: {
          findMany: vi.fn().mockResolvedValue([
            {
              id: "demand_handoff",
              projectId: "project_1",
              startDate: new Date("2026-03-17"),
              endDate: new Date("2026-03-18"),
              hoursPerDay: 8,
              percentage: 100,
              role: "Comp",
              roleId: "role_comp",
              headcount: 1,
              status: AllocationStatus.PROPOSED,
              metadata: { estimateHandoff: { estimateVersionId: "ver_1" } },
              createdAt: new Date("2026-03-13"),
              updatedAt: new Date("2026-03-13"),
            },
          ]),
        },
        assignment: {
          findMany: vi.fn().mockResolvedValue([
            {
              id: "assignment_handoff",
              demandRequirementId: "demand_handoff",
              resourceId: "resource_1",
              projectId: "project_1",
              startDate: new Date("2026-03-17"),
              endDate: new Date("2026-03-18"),
              hoursPerDay: 8,
              percentage: 100,
              role: "Comp",
              roleId: "role_comp",
              dailyCostCents: 32000,
              status: AllocationStatus.PROPOSED,
              metadata: { estimateHandoff: { estimateVersionId: "ver_1" } },
              createdAt: new Date("2026-03-13"),
              updatedAt: new Date("2026-03-13"),
            },
            {
              id: "assignment_explicit_only",
              demandRequirementId: null,
              resourceId: "resource_2",
              projectId: "project_1",
              startDate: new Date("2026-03-19"),
              endDate: new Date("2026-03-20"),
              hoursPerDay: 4,
              percentage: 50,
              role: "Lead",
              roleId: "role_lead",
              dailyCostCents: 20000,
              status: AllocationStatus.PROPOSED,
              metadata: { estimateHandoff: { estimateVersionId: "ver_1" } },
              createdAt: new Date("2026-03-13"),
              updatedAt: new Date("2026-03-13"),
            },
          ]),
        },
      } as never,
      { projectId: "project_1", estimateVersionId: "ver_1" },
    );

    expect(result).toBe(3);
  });
});
