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

describe("countPlanningEntries", () => {
  it("counts demand and assignment planning entries", async () => {
    const result = await countPlanningEntries(
      {
        demandRequirement: {
          findMany: vi.fn().mockResolvedValue([
            {
              id: "demand_1",
              projectId: "project_1",
              startDate: new Date("2026-03-17"),
              endDate: new Date("2026-03-18"),
              hoursPerDay: 8,
              percentage: 100,
              role: "FX",
              roleId: "role_fx",
              headcount: 2,
              status: AllocationStatus.PROPOSED,
              metadata: {},
              createdAt: new Date("2026-03-13"),
              updatedAt: new Date("2026-03-13"),
            },
          ]),
        },
        assignment: {
          findMany: vi.fn().mockResolvedValue([
            {
              id: "assignment_1",
              demandRequirementId: null,
              resourceId: "resource_1",
              projectId: "project_1",
              startDate: new Date("2026-03-17"),
              endDate: new Date("2026-03-18"),
              hoursPerDay: 8,
              percentage: 100,
              role: "Lead",
              roleId: "role_lead",
              dailyCostCents: 32000,
              status: AllocationStatus.ACTIVE,
              metadata: {},
              createdAt: new Date("2026-03-13"),
              updatedAt: new Date("2026-03-13"),
            },
          ]),
        },
      } as never,
      { projectIds: ["project_1"] },
    );

    expect(result.totalCount).toBe(2);
    expect(result.countsByProjectId.get("project_1")).toBe(2);
    expect(result.countsByRoleId.get("role_fx")).toBe(1);
    expect(result.countsByRoleId.get("role_lead")).toBe(1);
  });
});
