import { useQuery } from "@tanstack/react-query"
import {
  fetchRevenue,
  fetchAgenda,
  fetchOccupancyRate,
  fetchServiceAppointments,
  fetchWeeklyBookings,
  fetchWeeklyEarnings,
  fetchPeakHours,
  fetchBookingRatio,
  fetchStylistPerformance,
  fetchRevenueStats,
  fetchAppointmentStats,
  fetchClientsStats,
  getRevenue,
  getAgenda,
  getOccupancyRate,
  getServiceAppointments,
  getWeeklyBookings,
  getWeeklyEarnings,
  getPeakHours,
  getBookingRatio,
  getStylistPerformance,
  getRevenueStats,
  getAppointmentStats,
  getClientsStats,
  getAIAnalytics,
  fetchAIAnalytics,
  getAICallDuration,
  fetchAICallDuration,
  getAIAppointmentsCount,
  fetchAIAppointmentsCount,
  getDailyMetrics,
  fetchDailyMetrics
} from "../queries/analytics"
import type {
  RevenueData,
  AgendaData,
  OccupancyRateData,
  ServiceAppointmentsData,
  WeeklyBookingsData,
  WeeklyEarningsData,
  PeakHoursData,
  BookingRatioData,
  StylistPerformanceData,
  RevenueStatsData,
  AppointmentStatsData,
  ClientStatsData,
  StylistOccupancyRate,
  PopularService,
  PeakHourItem,
  StylistPerformanceItem,
  AIAnalyticsResponse,
  AICallDurationData,
  AIAppointmentsCountData,
  DailyMetricsData
} from "@/types/analytics"
import { get } from "http"

export function useGetRevenue() {
  return useQuery<RevenueData>({
    queryKey: getRevenue,
    queryFn: fetchRevenue
  })
}

export function useGetAgenda() {
  return useQuery<AgendaData>({
    queryKey: getAgenda,
    queryFn: fetchAgenda
  })
}

export function useGetOccupancyRate() {
  return useQuery<StylistOccupancyRate[]>({
    queryKey: getOccupancyRate,
    queryFn: fetchOccupancyRate
  })
}

export function useGetServiceAppointments() {
  return useQuery<PopularService[]>({
    queryKey: getServiceAppointments,
    queryFn: fetchServiceAppointments
  })
}

export function useGetWeeklyBookings(range: string = "daily") {
  return useQuery<WeeklyBookingsData>({
    queryKey: [getWeeklyBookings, range],
    queryFn: () => fetchWeeklyBookings(range)
  })
}

export function useGetWeeklyEarnings(range: string = "daily") {
  return useQuery<WeeklyEarningsData>({
    queryKey: [getWeeklyEarnings, range],
    queryFn: () => fetchWeeklyEarnings(range)
  })
}

export function useGetPeakHours() {
  return useQuery<PeakHourItem>({
    queryKey: getPeakHours,
    queryFn: fetchPeakHours
  })
}

export function useGetBookingRatio() {
  return useQuery<BookingRatioData>({
    queryKey: getBookingRatio,
    queryFn: fetchBookingRatio
  })
}

export function useGetStylistPerformance() {
  return useQuery<StylistPerformanceData>({
    queryKey: getStylistPerformance,
    queryFn: fetchStylistPerformance
  })
}

export function useGetRevenueStats() {
  return useQuery<RevenueStatsData>({
    queryKey: getRevenueStats,
    queryFn: fetchRevenueStats
  })
}

export function useGetAppointmentStats() {
  return useQuery<AppointmentStatsData>({
    queryKey: getAppointmentStats,
    queryFn: fetchAppointmentStats
  })
}

export function useGetClientsStats() {
  return useQuery<ClientStatsData>({
    queryKey: getClientsStats,
    queryFn: fetchClientsStats
  })
}

export function useGetAIAnalytics() {
  return useQuery<AIAnalyticsResponse>({
    queryKey: getAIAnalytics,
    queryFn: fetchAIAnalytics
  })
}

export function useGetAICallDuration() {
  return useQuery<AICallDurationData>({
    queryKey: getAICallDuration,
    queryFn: fetchAICallDuration
  })
}

export function useGetAIAppointmentsCount() {
  return useQuery<AIAppointmentsCountData>({
    queryKey: getAIAppointmentsCount,
    queryFn: fetchAIAppointmentsCount
  })
}

export function useGetDailyMetrics() {
  return useQuery<DailyMetricsData>({
    queryKey: getDailyMetrics,
    queryFn: fetchDailyMetrics
  })
}