import { vi } from "vitest";

export function createResourceRankingTestDb() {
  const assignmentFindMany = vi
    .fn()
    .mockResolvedValueOnce([
      {
        resourceId: "res_carol",
        hoursPerDay: 2,
        startDate: new Date("2026-01-05T00:00:00.000Z"),
        endDate: new Date("2026-01-16T00:00:00.000Z"),
        status: "PROPOSED",
        resource: {
          id: "res_carol",
          eid: "carol.danvers",
          displayName: "Carol Danvers",
          chapter: "Delivery",
          lcrCents: 7664,
          availability: { monday: 8, tuesday: 8, wednesday: 8, thursday: 8, friday: 8 },
          countryId: "country_de",
          federalState: "HH",
          metroCityId: "city_hamburg",
          country: { code: "DE", name: "Deutschland" },
          metroCity: { name: "Hamburg" },
          areaRole: { name: "Artist" },
        },
      },
      {
        resourceId: "res_steve",
        hoursPerDay: 4,
        startDate: new Date("2026-01-05T00:00:00.000Z"),
        endDate: new Date("2026-01-16T00:00:00.000Z"),
        status: "CONFIRMED",
        resource: {
          id: "res_steve",
          eid: "steve.rogers",
          displayName: "Steve Rogers",
          chapter: "Delivery",
          lcrCents: 13377,
          availability: { monday: 8, tuesday: 8, wednesday: 8, thursday: 8, friday: 8 },
          countryId: "country_de",
          federalState: "BY",
          metroCityId: "city_augsburg",
          country: { code: "DE", name: "Deutschland" },
          metroCity: { name: "Augsburg" },
          areaRole: { name: "Artist" },
        },
      },
    ])
    .mockResolvedValueOnce([
      {
        resourceId: "res_carol",
        projectId: "project_lari",
        hoursPerDay: 2,
        startDate: new Date("2026-01-05T00:00:00.000Z"),
        endDate: new Date("2026-01-16T00:00:00.000Z"),
        status: "PROPOSED",
        project: { name: "Gelddruckmaschine", shortCode: "LARI" },
      },
      {
        resourceId: "res_steve",
        projectId: "project_lari",
        hoursPerDay: 4,
        startDate: new Date("2026-01-05T00:00:00.000Z"),
        endDate: new Date("2026-01-16T00:00:00.000Z"),
        status: "CONFIRMED",
        project: { name: "Gelddruckmaschine", shortCode: "LARI" },
      },
    ]);

  return {
    assignmentFindMany,
    db: {
      project: {
        findUnique: vi
          .fn()
          .mockResolvedValueOnce(null)
          .mockResolvedValueOnce({
            id: "project_lari",
            name: "Gelddruckmaschine",
            shortCode: "LARI",
            status: "ACTIVE",
            responsiblePerson: "Larissa Joos",
            startDate: new Date("2026-01-05T00:00:00.000Z"),
            endDate: new Date("2026-01-16T00:00:00.000Z"),
          })
          .mockResolvedValueOnce({
            id: "project_lari",
            name: "Gelddruckmaschine",
            shortCode: "LARI",
            status: "ACTIVE",
            responsiblePerson: "Larissa Joos",
          }),
        findFirst: vi.fn(),
      },
      assignment: {
        findMany: assignmentFindMany,
      },
      vacation: {
        findMany: vi.fn().mockResolvedValue([]),
      },
    },
  };
}
