import { type UseQueryOptions } from "@tanstack/react-query";

export interface ApiError {
  response: {
    data: {
      statusCode: number;
      message: string;
      errorMessage?: string;
      messageCode?: string;
    };
  };
}

export interface ApiResponse<T = unknown> {
  statusCode: number;
  message: string;
  data: T;
  error?: boolean;
  errorMessage?: string;
  messageCode?: string;
}

export interface UseFetchDataProps<T> {
  url: string;
  params?: Record<string, unknown>;
  queryOptions?: Omit<UseQueryOptions<T, Error, T>, "queryKey" | "queryFn">;
  enabled?: boolean;
  refetchQueries?: string[];
  customGroupId?: string;
  customCompanyId?: string;
  useCompanyAsToken?: boolean;
  companyremove?: boolean;
  queryKey?: string;
  isTokenOptional?: boolean;
  staleTime?: number;
}

export interface UseFetchDetailsProps<T> {
  url: string;
  id: number | string | undefined;
  queryOptions?: Omit<UseQueryOptions<T, Error, T>, "queryKey" | "queryFn">;
  enabled?: boolean;
}

export type UpdateDataParams<TPayload> = {
  id: string | number;
  payload: TPayload;
  headers?: Record<string, string>;
};

declare module "next-auth" {
  interface Session {
    user: {
      id: string;
      profile_pic?: string | null;
      name?: string | null;
      email?: string | null;
      image?: string | null;
      last_ad_count_reset_date?: string | null;
      episode_enabled?: boolean;
      video_enabled?: boolean;
      both_enabled?: boolean;
      none_enabled?: boolean;
    };
  }
}
