import type { FleetResourceSlug } from "@/pages/fleet/config/resources";
import type { BookingListFilter } from "@/services/bookings.service";
import type { RuleEngineListParams } from "@/services/ruleEngine/ruleEngine.service";
import type { CompanyListFilter } from "@/types/customer";
import type { RuleEngineResourceSlug } from "@/types/rule-engine";
import type { TrainScheduleFilters } from "@/types/trainScheduling";

export const QUERY_KEYS = {
  USERS: {
    ROOT: ["users"] as const,
    ADD: ["users", "add"] as const,
  },

  FILES: {
    ROOT: ["file-upload-settings"] as const,
    list: () => ["file-upload-settings", "list"] as const,
    byId: (id: string) => ["file-upload-settings", "detail", id] as const,
    byCode: (code: string) => ["file-upload-settings", "by-code", code] as const,
  },

  DROPDOWN_SETTINGS: {
    ROOT: ["dropdown-settings"] as const,
    list: () => ["dropdown-settings", "list"] as const,
    byId: (id: string) => ["dropdown-settings", "detail", id] as const,
    byCode: (code: string) => ["dropdown-settings", "by-code", code] as const,
  },

  CUSTOMERS: {
    ROOT: ["customers"] as const,
    stats: ["customers", "stats"] as const,
    list: (filter?: CompanyListFilter) =>
      ["customers", "list", filter ?? {}] as const,
    byId: (id: string) => ["customers", "detail", id] as const,
    bookings: (id: string) => ["customers", "detail", id, "bookings"] as const,
    documents: (id: string) => ["customers", "detail", id, "documents"] as const,
    payments: (id: string) => ["customers", "detail", id, "payments"] as const,
  },

  BOOKINGS: {
    ROOT: ["bookings"] as const,
    list: (filter?: BookingListFilter) =>
      ["bookings", "list", filter ?? {}] as const,
    listSummary: (filter?: BookingListFilter) =>
      ["bookings", "list-summary", filter ?? {}] as const,
    byId: (id: string) => ["bookings", "detail", id] as const,
  },

  TRAIN_SCHEDULING: {
    ROOT: ["train-scheduling"] as const,
    eligible: (freightType?: string, filters?: TrainScheduleFilters) =>
      ["train-scheduling", "eligible-bookings", freightType ?? "CONTAINER", filters ?? {}] as const,
    locomotives: (routeId?: string) =>
      ["train-scheduling", "locomotives", routeId ?? "all"] as const,
    stations: () => ["train-scheduling", "stations"] as const,
    schedules: () => ["train-scheduling", "schedules"] as const,
    scheduleById: (id: string) => ["train-scheduling", "schedule", id] as const,
    track: (id: string) => ["train-scheduling", "track", id] as const,
    batchBoard: () => ["train-scheduling", "batch-board"] as const,
    batchBoardDetail: (scheduleId: string) =>
      ["train-scheduling", "batch-board", scheduleId] as const,
    unassignedBookings: (id: string) =>
      ["train-scheduling", "unassigned", id] as const,
    compositionRemovals: (id: string) =>
      ["train-scheduling", "removals", id] as const,
  },

  FLEET: {
    ROOT: ["fleet"] as const,
    list: (resource: FleetResourceSlug | string) => ["fleet", "list", resource] as const,
  },

  FIRST_MILE: {
    ROOT: ["first-mile"] as const,
    list: (filter?: Record<string, unknown>) => ["first-mile", "list", filter ?? {}] as const,
    byId: (id: string) => ["first-mile", "detail", id] as const,
  },

  LAST_MILE: {
    ROOT: ["last-mile"] as const,
    list: (filter?: Record<string, unknown>) => ["last-mile", "list", filter ?? {}] as const,
    byId: (id: string) => ["last-mile", "detail", id] as const,
  },

  RULE_ENGINE: {
    ROOT: ["rule-engine"] as const,
    list: (resource: RuleEngineResourceSlug | string, params?: RuleEngineListParams) =>
      ["rule-engine", "list", resource, params ?? {}] as const,
    detail: (resource: RuleEngineResourceSlug | string, id: string) =>
      ["rule-engine", "detail", resource, id] as const,
    chain: ["rule-engine", "approval-rules", "chain"] as const,
    selectOptions: (
      resource: RuleEngineResourceSlug | string,
      params?: Record<string, unknown>,
    ) => ["rule-engine", "select-options", resource, params ?? {}] as const,
    orderList: (resource: RuleEngineResourceSlug | string) =>
      ["rule-engine", "order-list", resource] as const,
  },

  OVERVIEW: {
    ROOT: ["overview"] as const,
    dashboard: (range?: string) => ["overview", "dashboard", range ?? "30d"] as const,
    bookingsTab: (range?: string) => ["overview", "bookings", range ?? "30d"] as const,
    billingTab: (range?: string) => ["overview", "billing", range ?? "30d"] as const,
    operationsTab: () => ["overview", "operations"] as const,
    customersTab: (range?: string) => ["overview", "customers", range ?? "30d"] as const,
    staffTab: (range?: string) => ["overview", "staff", range ?? "30d"] as const,
  },
} as const;
