import { api } from "@/lib/api"
import { AssistantAssignedNumberResponse, AssistantAssignedSMSNumberResponse, PhoneNumberOption, AvailablePhoneNumbersResponse, AssistantVoiceMapping, AssistantVoiceSettingsResponse, AssistantVoiceSettings, WhatsAppConnectionStatus } from "@/types/assistant"

export const getAssistantAssignedNumber = ["assistant", "assignedNumber"] as const
export const getAssistantAssignedSMSNumber = ["assistant", "assignedSMSNumber"] as const
export const getAssistantAvailableNumbers = (countryCode?: string) => ["assistant", "availableNumbers", countryCode] as const

export const assignAssistantNumber = ["assistant", "assignNumber"] as const
export const getAssistantNumbersPricing = (countryCode?: string) => ["assistant", "numbersPricing", countryCode] as const
export const getAssistantTrainingData = ["assistant", "trainingData"] as const

export async function fetchAssistantAssignedNumber(): Promise<AssistantAssignedNumberResponse> {
  const { data } = await api.get("/twilio/assignedNumber")
  return data
}

export async function fetchAssistantAssignedSMSNumber(): Promise<AssistantAssignedSMSNumberResponse> {
  const { data } = await api.get("/twilio/assignedSMSNumber")
  return data
}

export async function fetchAssistantAvailableNumbers(countryCode?: string, type: string = "local"): Promise<AvailablePhoneNumbersResponse> {
  const { data } = await api.get("/twilio/available-phone-numbers", {
    params: { countryCode, type }
  })
  return data
}

export async function assignAssistantPhoneNumber(phoneNumber: string) {
  const { data } = await api.post("/twilio/create-incoming-phone-number", { phoneNumber })
  return data
}

export async function fetchAssistantNumbersPricing(countryCode?: string) {
  const iso = countryCode?.toUpperCase() || "FR"
  const { data } = await api.get(`/twilio/salon/country/${iso}`)
  return data
}

export async function fetchVoiceChatSessionId(phoneNumber: string): Promise<{ message: string; chatId: string }> {
  const { data } = await api.post("/twilio/incomingvoice", { To: phoneNumber })
  return data
}

export async function sendCall(payload: { from: string; to: string }): Promise<{ message: string; callSid: string }> {
  const { data } = await api.post("/twilio/send-call", {
    from: payload.from,
    to: payload.to
  })
  return data
}

export async function fetchAssistantTrainingData(): Promise<{ trainingData?: string; _id: string }> {
  const { data } = await api.get("/services/salon/training-data")
  return data
}

export async function updateAssistantTrainingData(payload: { trainingData: string }) {
  const { data } = await api.patch("/services/salon/training-data", payload)
  return data
}

export const getAssistantVoices = ["assistant", "voices"] as const

export async function fetchAssistantVoices(): Promise<AssistantVoiceMapping[]> {
  const { data } = await api.get("/agent/assistant/voice")
  return data
}

export const getVoiceSettings = ["assistant", "voiceSettings"] as const

export async function fetchVoiceSettings(): Promise<AssistantVoiceSettingsResponse> {
  const { data } = await api.get("/agent/voice-settings/assistant")
  return data
}

export async function updateVoiceSettings(payload: AssistantVoiceSettings) {
  const { data } = await api.patch("/agent/voice-settings/assistant", payload)
  return data
}

// WhatsApp Embedded Signup
export const getWhatsAppEmbeddedSignup = ["assistant", "whatsappEmbeddedSignup"] as const

export interface WhatsAppEmbeddedSignupPayload {
  code: string
  phone_number_id?: string
  waba_id?: string
  salonId: string
}


export async function submitWhatsAppEmbeddedSignup(payload: WhatsAppEmbeddedSignupPayload) {
  const { data } = await api.post("/whatsapp/embedded-signup", payload)
  return data
}

// WhatsApp Connection Status
export const getWhatsAppConnectionStatus = ["assistant", "whatsappConnectionStatus"] as const

export async function fetchWhatsAppConnectionStatus(): Promise<WhatsAppConnectionStatus> {
  const { data } = await api.get("/whatsapp/connection/status")
  return data
}

// Instagram Connection Status
export const getInstagramConnectionStatus = ["assistant", "instagramConnectionStatus"] as const

export async function fetchInstagramConnectionStatus(): Promise<WhatsAppConnectionStatus> {
  const { data } = await api.get("/whatsapp/instagram/connection/status")
  return data
}

// Chat History
export interface ChatMessage {
  role: "user" | "assistant" | "tool"
  content: string
}

export const getChatHistory = (chatId: string, platformUsed: string) => ["agent", "chatHistory", chatId, platformUsed] as const

export async function fetchChatHistory(chatId: string, platformUsed: string): Promise<ChatMessage[]> {
  const { data } = await api.get(`/agent/${chatId}/history`, {
    params: { platformUsed }
  })
  return data
}

export async function stopInstagramEvents() {
  const { data } = await api.post("/whatsapp/stop-instagram-events")
  return data
}

export async function stopWhatsAppEvents() {
  const { data } = await api.post("/whatsapp/stop-whatsapp-events")
  return data
}

