import {
  InteractionItem,
  PaginatedResponse,
  WatchHistoryResponse,
} from "@/components/profile/mylist/history-type";
import {
  dailyCheckInData,
  subscriptionCoinData,
  subScriptionList,
  usercoinSetting,
  walletData,
} from "@/components/profile/profile.type";
import useDeleteData from "@/hook/api-request/use-delete-data";
import useFetchData from "@/hook/api-request/use-fetch-data";
import usePostData from "@/hook/api-request/use-post-data";
import usePutData from "@/hook/api-request/use-put-data";
import API from "@/instance/api";

interface PurchaseCoinResponse {
  url: string;
}

export const useGetMyIntreactionList = (params: {
  page: number;
  limit: number;
}) => {
  return useFetchData<PaginatedResponse<InteractionItem>>({
    url: API.profile.myList,
    params,
  });
};

export const useGetWatchHistory = (params: { page: number; limit: number }) => {
  return useFetchData<WatchHistoryResponse>({
    url: API.profile.watchHistory,
    params,
  });
};

export const useGetDailyCheckIn = (params: {
  timezone: string;
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
  session: any;
}) => {
  return useFetchData<dailyCheckInData[]>({
    url: API.profile.dailuCheckIn,
    params: {
      timezone: params.timezone,
    },
    enabled: !!params.session,
  });
};
export const useGetMyTransactionHistory = (params: {
  pagination: boolean;
  page: number;
  limit: number;
  date: string;
}) => {
  return useFetchData({
    url: API.profile.transactionHistory,
    params,
  });
};

export const useAddDailyCheckIn = () => {
  return usePostData({
    url: API.profile.dailuCheckIn,
  });
};

export const useGetUserCoinSetting = () => {
  return usePostData<usercoinSetting>({
    url: API.profile.userCoinSetting,
    showToast: false,
  });
};
export const useGetMyEpisodeUnlockedList = (params: {
  filter?: string;
  startstartDate?: string;
  endDate?: string;
}) => {
  return useFetchData({
    url: API.profile.episodeUnlockedList,
    params,
  });
};

export const useDeleteMyEpisodeUnlocked = () => {
  return useDeleteData({
    url: API.profile.episodeUnlockedList + "/",
  });
};

export const useDeleteAllMyEpisodesUnlocked = () => {
  return useDeleteData({
    url: API.profile.episodeUnlockedList + "/all",
  });
};

export const useGetRewardCoinHistory = (params: {
  page: number;
  limit: number;
  filter: string;
}) => {
  return useFetchData({
    url: API.profile.episodeUnlockedList,
    params,
  });
};
export const useAutoUnlockList = (params: { page: number; limit: number }) => {
  return useFetchData({
    url: API.profile.autoUnlockList,
    params,
  });
};

export const useStartAutoUnlock = () => {
  return usePostData({
    url: API.profile.startAutoUnlock,
  });
};
export const useStopAutoUnlock = () => {
  return usePostData({
    url: API.profile.stopAutoUnlock,
  });
};

export const useReviews = () => {
  return usePostData({
    url: API.profile.reviews,
  });
};

// export const useGetMyReminderList = () => {
//   return useFetchData({
//     url: API.profile.reminder,
//   });
// };
export const useGetMyReminderList = () => {
  return useFetchData<PaginatedResponse<InteractionItem>>({
    url: API.profile.reminder,
  });
};

export const useGetEarlyAccess = (params: { page: number; limit: number }) => {
  return useFetchData({
    url: API.profile.earlyAccess,
    params,
  });
};

export const useGetCheckWalletBalance = (enabled: boolean) => {
  return useFetchData<walletData>({
    url: API.profile.checkWalletBalance,
    enabled: enabled,
  });
};

export const useGetSubScriptionList = (enabled: boolean) => {
  return useFetchData<subScriptionList[]>({
    url: API.profile.subScriptionList,
    enabled: enabled,
  });
};

export const useUnlockEpisode = () => {
  return usePostData({
    url: API.profile.unLockEpisode,
    showToast: false,
  });
};

export const useAutoUnlockEpisode = () => {
  return usePostData({
    url: API.profile.startAutoUnlock,
    showToast: false,
  });
};

export const usePurchaseCoin = () => {
  return usePostData<PurchaseCoinResponse>({
    url: API.profile.purchaseCoin,
    onSuccess(data) {
      if (data?.url) {
        window.location.href = data.url; // redirect
      }
    },
  });
};

export const useSubscriptionCoin = () => {
  return usePostData<PurchaseCoinResponse>({
    url: API.profile.subscription,
    onSuccess(data) {
      if (data?.url) {
        window.location.href = data.url; // redirect
      }
    },
  });
};

export const useGetSubScriptionCoinList = () => {
  return useFetchData<subscriptionCoinData[]>({
    url: API.profile.coinList,
  });
};

export const useDeleteSubscription = () => {
  return useDeleteData({
    url: API.profile.cancelSubscription,
  });
};

export const useDeleteAccount = () => {
  return useDeleteData({
    url: API.profile.deleteAccount,
  });
};

export interface AdsenseSettingResponse {
  episode_enabled: boolean;
  video_enabled: boolean;
  both_enabled: boolean;
  none_enabled: boolean;
}

export const useUpdateAdsenseSetting = () => {
  return usePutData<AdsenseSettingResponse, AdsenseSettingResponse>({
    url: API.profile.adsense,
  });
};
