import { AllocationStatus } from "@capakraken/shared";
import { vi } from "vitest";

vi.mock("@capakraken/application", async (importOriginal) => {
  const actual = await importOriginal<typeof import("@capakraken/application")>();
  return {
    ...actual,
    getDashboardBudgetForecast: vi.fn().mockResolvedValue([]),
    getDashboardPeakTimes: vi.fn().mockResolvedValue([]),
    listAssignmentBookings: vi.fn().mockResolvedValue([]),
  };
});

vi.mock("../sse/event-bus.js", () => ({
  emitAllocationCreated: vi.fn(),
  emitAllocationDeleted: vi.fn(),
  emitAllocationUpdated: vi.fn(),
  emitProjectShifted: vi.fn(),
}));

vi.mock("../lib/budget-alerts.js", () => ({
  checkBudgetThresholds: vi.fn(),
}));

vi.mock("../lib/cache.js", () => ({
  invalidateDashboardCache: vi.fn(),
}));

import { executeTool as executeAssistantTool } from "../router/assistant-tools.js";

export { createToolContext } from "./assistant-tools-advanced-timeline-test-helpers.js";
export const executeTool = executeAssistantTool;

export function createExistingAssignment() {
  return {
    id: "assignment_1",
    demandRequirementId: null,
    resourceId: "resource_1",
    projectId: "project_1",
    startDate: new Date("2026-03-16"),
    endDate: new Date("2026-03-20"),
    hoursPerDay: 4,
    percentage: 50,
    role: "Compositor",
    roleId: "role_comp",
    dailyCostCents: 20000,
    status: AllocationStatus.PROPOSED,
    metadata: {},
    createdAt: new Date("2026-03-13"),
    updatedAt: new Date("2026-03-13"),
    resource: {
      id: "resource_1",
      displayName: "Alice",
      eid: "E-001",
      lcrCents: 5000,
      availability: {
        monday: 8,
        tuesday: 8,
        wednesday: 8,
        thursday: 8,
        friday: 8,
        saturday: 0,
        sunday: 0,
      },
    },
    project: { id: "project_1", name: "Project One", shortCode: "PRJ" },
    roleEntity: { id: "role_comp", name: "Compositor", color: "#111111" },
    demandRequirement: null,
  };
}
