declare type TToken = {
  accessToken: string;
  refreshToken: string;
  id: string;
};

declare type TNavigationRoute = {
  name: string;
  params?: TKeyValuePair;
  query?: TKeyValuePair;
};

declare type TNavigationItem = {
  title: string;
  icon?: string;
  route?: TNavigationRoute;
  children?: TNavigationItem[];
  link?: string
};

declare type TKeyValuePair<
  K extends string | number | symbol = string,
  V = string | number | object | Array | TKeyValuePair
> = {
  [key in K]: V;
};

declare type TFeedbackPaginatedResponse = {
  items: TFeedback[];
  totalItems: number;
  page: number;
  pages: number;
  pageRange: string;
};

declare type TCustomerPaginatedResponse = {
  items: TCustomer[];
  totalItems: number;
  page: number;
  pages: number;
  pageRange: string;
};

declare type TSitePaginatedResponse = {
  items: TSite[];
  totalItems: number;
  page: number;
  pages: number;
  pageRange: string;
};

declare type TServiceProviderPaginatedResponse = {
  items: TServiceProvider[];
  totalItems: number;
  page: number;
  pages: number;
  pageRange: string;
};

declare type TWorkOrderPaginatedResponse = {
  items: TWorkOrder[];
  totalItems: number;
  page: number;
  pages: number;
  pageRange: string;
};

declare type TMemberPaginatedResponse = {
  items: TMember[];
  totalItems: number;
  page: number;
  pages: number;
  pageRange: string;
};
