import { BOOKING_DI_TOKENS } from "@calcom/features/bookings/di/tokens";
import { EVENT_TYPE_DI_TOKENS } from "@calcom/features/eventtypes/di/tokens";
import { FEATURE_OPT_IN_DI_TOKENS } from "@calcom/features/feature-opt-in/di/tokens";
import { FLAGS_DI_TOKENS } from "@calcom/features/flags/di/tokens";
import { HASHED_LINK_DI_TOKENS } from "@calcom/features/hashedLink/di/tokens";
import { OAUTH_DI_TOKENS } from "@calcom/features/oauth/di/tokens";
import { TRANSLATION_DI_TOKENS } from "@calcom/features/translation/di/tokens";
import { WATCHLIST_DI_TOKENS } from "./watchlist/Watchlist.tokens";
import { WEBHOOK_TOKENS } from "./webhooks/Webhooks.tokens";

export const DI_TOKENS = {
  PRISMA_CLIENT: Symbol("PrismaClient"),
  READ_ONLY_PRISMA_CLIENT: Symbol("ReadOnlyPrismaClient"),
  PRISMA_MODULE: Symbol("PrismaModule"),
  REDIS_CLIENT: Symbol("RedisClient"),
  OOO_REPOSITORY: Symbol("OOORepository"),
  OOO_REPOSITORY_MODULE: Symbol("OOORepositoryModule"),
  SCHEDULE_REPOSITORY: Symbol("ScheduleRepository"),
  SCHEDULE_REPOSITORY_MODULE: Symbol("ScheduleRepositoryModule"),
  SELECTED_SLOT_REPOSITORY: Symbol("SelectedSlotRepository"),
  SELECTED_SLOT_REPOSITORY_MODULE: Symbol("SelectedSlotRepositoryModule"),
  USER_REPOSITORY: Symbol("UserRepository"),
  USER_REPOSITORY_MODULE: Symbol("UserRepositoryModule"),
  BOOKING_REPOSITORY: Symbol("BookingRepository"),
  BOOKING_REPOSITORY_MODULE: Symbol("BookingRepositoryModule"),
  BOOKING_ACCESS_SERVICE: Symbol("BookingAccessService"),
  BOOKING_ACCESS_SERVICE_MODULE: Symbol("BookingAccessServiceModule"),
  EVENT_TYPE_REPOSITORY: Symbol("EventTypeRepository"),
  EVENT_TYPE_REPOSITORY_MODULE: Symbol("EventTypeRepositoryModule"),
  AVAILABLE_SLOTS_SERVICE: Symbol("AvailableSlotsService"),
  AVAILABLE_SLOTS_SERVICE_MODULE: Symbol("AvailableSlotsModule"),
  ...FLAGS_DI_TOKENS,
  ...FEATURE_OPT_IN_DI_TOKENS,
  CHECK_BOOKING_LIMITS_SERVICE: Symbol("CheckBookingLimitsService"),
  CHECK_BOOKING_LIMITS_SERVICE_MODULE: Symbol("CheckBookingLimitsServiceModule"),
  CHECK_BOOKING_AND_DURATION_LIMITS_SERVICE: Symbol("CheckBookingAndDurationLimitsService"),
  CHECK_BOOKING_AND_DURATION_LIMITS_SERVICE_MODULE: Symbol("CheckBookingAndDurationLimitsServiceModule"),
  GET_USER_AVAILABILITY_SERVICE: Symbol("GetUserAvailabilityService"),
  GET_USER_AVAILABILITY_SERVICE_MODULE: Symbol("GetUserAvailabilityModule"),
  BUSY_TIMES_SERVICE: Symbol("BusyTimesService"),
  BUSY_TIMES_SERVICE_MODULE: Symbol("BusyTimesServiceModule"),
  QUALIFIED_HOSTS_SERVICE: Symbol("QualifiedHostsService"),
  QUALIFIED_HOSTS_SERVICE_MODULE: Symbol("QualifiedHostsServiceModule"),
  FILTER_HOSTS_SERVICE: Symbol("FilterHostsService"),
  FILTER_HOSTS_SERVICE_MODULE: Symbol("FilterHostsServiceModule"),
  NO_SLOTS_NOTIFICATION_SERVICE: Symbol("NoSlotsNotificationService"),
  NO_SLOTS_NOTIFICATION_SERVICE_MODULE: Symbol("NoSlotsNotificationServiceModule"),
  MEMBERSHIP_REPOSITORY: Symbol("MembershipRepository"),
  MEMBERSHIP_REPOSITORY_MODULE: Symbol("MembershipRepositoryModule"),
  LUCKY_USER_SERVICE: Symbol("LuckyUserService"),
  LUCKY_USER_SERVICE_MODULE: Symbol("LuckyUserServiceModule"),
  HOST_REPOSITORY: Symbol("HostRepository"),
  HOST_REPOSITORY_MODULE: Symbol("HostRepositoryModule"),
  HOLIDAY_REPOSITORY: Symbol("HolidayRepository"),
  HOLIDAY_REPOSITORY_MODULE: Symbol("HolidayRepositoryModule"),
  PROFILE_REPOSITORY: Symbol("ProfileRepository"),
  PROFILE_REPOSITORY_MODULE: Symbol("ProfileRepositoryModule"),
  MEMBERSHIP_SERVICE: Symbol("MembershipService"),
  MEMBERSHIP_SERVICE_MODULE: Symbol("MembershipServiceModule"),
  ASSIGNMENT_REASON_REPOSITORY: Symbol("AssignmentReasonRepository"),
  ASSIGNMENT_REASON_REPOSITORY_MODULE: Symbol("AssignmentReasonRepositoryModule"),
  CREDENTIAL_REPOSITORY: Symbol("CredentialRepository"),
  CREDENTIAL_REPOSITORY_MODULE: Symbol("CredentialRepositoryModule"),
  DESTINATION_CALENDAR_REPOSITORY: Symbol("DestinationCalendarRepository"),
  DESTINATION_CALENDAR_REPOSITORY_MODULE: Symbol("DestinationCalendarRepositoryModule"),
  MANAGED_EVENT_REASSIGNMENT_SERVICE: Symbol("ManagedEventReassignmentService"),
  MANAGED_EVENT_REASSIGNMENT_SERVICE_MODULE: Symbol("ManagedEventReassignmentServiceModule"),
  ORG_MEMBERSHIP_LOOKUP: Symbol("OrgMembershipLookup"),
  ORG_MEMBERSHIP_LOOKUP_MODULE: Symbol("OrgMembershipLookupModule"),
  // Booking service tokens
  ...BOOKING_DI_TOKENS,
  ...HASHED_LINK_DI_TOKENS,
  ...OAUTH_DI_TOKENS,
  ...WATCHLIST_DI_TOKENS,
  ...TRANSLATION_DI_TOKENS,
  ...WEBHOOK_TOKENS,
  ...EVENT_TYPE_DI_TOKENS,
};
