import { AllocationStatus } from "@capakraken/shared";
import { describe, expect, it } from "vitest";
import {
  timelineBatchQuickAssignInputSchema,
  timelineBatchShiftAllocationsInputSchema,
  timelineQuickAssignInputSchema,
} from "../router/timeline-allocation-mutation-schema-support.js";

describe("timeline allocation mutation schema support", () => {
  it("applies defaults for quick assign input", () => {
    expect(
      timelineQuickAssignInputSchema.parse({
        resourceId: "resource_1",
        projectId: "project_1",
        startDate: "2026-04-01T00:00:00.000Z",
        endDate: "2026-04-05T00:00:00.000Z",
      }),
    ).toEqual({
      resourceId: "resource_1",
      projectId: "project_1",
      startDate: new Date("2026-04-01T00:00:00.000Z"),
      endDate: new Date("2026-04-05T00:00:00.000Z"),
      hoursPerDay: 8,
      role: "Team Member",
      status: AllocationStatus.PROPOSED,
    });
  });

  it("applies defaults to each batch quick assign entry", () => {
    expect(
      timelineBatchQuickAssignInputSchema.parse({
        assignments: [
          {
            resourceId: "resource_1",
            projectId: "project_1",
            startDate: "2026-04-01T00:00:00.000Z",
            endDate: "2026-04-05T00:00:00.000Z",
          },
        ],
      }),
    ).toEqual({
      assignments: [
        {
          resourceId: "resource_1",
          projectId: "project_1",
          startDate: new Date("2026-04-01T00:00:00.000Z"),
          endDate: new Date("2026-04-05T00:00:00.000Z"),
          hoursPerDay: 8,
          role: "Team Member",
          status: AllocationStatus.PROPOSED,
        },
      ],
    });
  });

  it("defaults batch shift mode to move", () => {
    expect(
      timelineBatchShiftAllocationsInputSchema.parse({
        allocationIds: ["allocation_1"],
        daysDelta: 3,
      }),
    ).toEqual({
      allocationIds: ["allocation_1"],
      daysDelta: 3,
      mode: "move",
    });
  });
});
