import axios from "axios";
import { getStoredLocale } from "../getLocale";

export async function intializeChat(token: string, payload: any): Promise<any> {
  try {
    const locale = getStoredLocale();

    const url = `${process.env.NEXT_PUBLIC_API_URL}/chat/conversation/store`;

    const headers: Record<string, string> = {
      "Content-Type": "application/json",
      "Accept-Language": locale,
      Authorization: "Bearer " + token,
    };

    const res = await axios.post(url, payload, { headers });
    const result = res?.data;

    return {
      success: true,
      message: "Chat Intialized Successfully!",
      data: result,
    };
  } catch (error: any) {
    throw error;
  }
}

export async function getAllChats(
  token: string,
  payload: any,
  {
  search = "",
  page, limit = 10 }: { page: number; limit?: number ,search?: string }
): Promise<any> {
  try {
    const locale = getStoredLocale();
    const params = new URLSearchParams({
      page: String(page),
      limit: String(limit),
    });

    if (search.trim()) {
      params.append("search", search);
    }
    const url = `${process.env.NEXT_PUBLIC_API_URL}/chat/conversation-list?${params.toString()}`;

    const headers: Record<string, string> = {
      "Content-Type": "application/json",
      "Accept-Language": locale,
      Authorization: "Bearer " + token,
    };

    const res = await axios.post(url, payload, { headers });
    const result = res?.data?.data?.conversation;
    return {
      success: true,
      message: "Conversation Fetched Successfully!",
      data: result,
      totalPages: res?.data?.data?.totalPages,
    };
  } catch (error) {
    throw error;
  }
}

export async function conversationDetail(
  token: string,
  conversationId: string,
  { page, limit = 10 }: { page: number; limit?: number }
) {
  try {
    const locale = getStoredLocale();

    const url = `${process.env.NEXT_PUBLIC_API_URL}/chat/conversation-details?page=${page}&limit=${limit}`;

    const headers: Record<string, string> = {
      "Content-Type": "application/json",
      "Accept-Language": locale,
      Authorization: "Bearer " + token,
    };

    const res = await axios.post(
      url,
      { conversation_id: conversationId },
      { headers }
    );
    const result = res?.data?.data;

    return {
      success: true,
      message: "Conversation Fetched Successfully!",
      data: result,
    };
  } catch (error) {
    throw error;
  }
}

export async function storeMessage(token: string, payload: any) {
  try {
    const locale = getStoredLocale();

    const url = `${process.env.NEXT_PUBLIC_API_URL}/chat/message/store`;

    const headers: Record<string, string> = {
      "Accept-Language": locale,
      Authorization: "Bearer " + token,
    };

    const res = await axios.post(url, payload, { headers });
    const result = res?.data?.data;

    return {
      success: true,
      message: "Conversation Fetched Successfully!",
      data: result,
    };
  } catch (error) {
    throw error;
  }
}

export async function indexNegotiation(
  token: string,
  data: { conversation_id: string }
): Promise<any> {
  try {
    const locale = getStoredLocale();

    const url = `${process.env.NEXT_PUBLIC_API_URL}/chat/get-negotiation-history`;

    const headers: Record<string, string> = {
      "Accept-Language": locale,
      Authorization: "Bearer " + token,
    };

    const res = await axios.post(url, data, { headers });
    const result = res?.data?.history;

    return {
      success: true,
      message: "Negotiation History Fetched Successfully!",
      data: result,
    };
  } catch (error) {
    throw error;
  }
}

export async function getCounterOffers(
  token: string,
  data: { productId: string; user_id?: string }
): Promise<any> {
  try {
    const locale = getStoredLocale();

    const url = `${process.env.NEXT_PUBLIC_API_URL}/chat/get-product-offers`;

    const headers: Record<string, string> = {
      "Accept-Language": locale,
      Authorization: "Bearer " + token,
    };

    let payload = {
      productId: data.productId,
    };
    if (data.user_id) {
      (payload as any)["user_id"] = data.user_id;
    }

    const res = await axios.post(url, payload, { headers });
    const result = res?.data?.offers;

    return {
      success: true,
      message: "Negotiation History Fetched Successfully!",
      data: result,
    };
  } catch (error) {
    throw error;
  }
}

export async function acceptOffer(
  token: string,
  data: { chatId: string; action: string }
): Promise<any> {
  try {
    const locale = getStoredLocale();

    const url = `${process.env.NEXT_PUBLIC_API_URL}/chat/respond-to-offer`;

    const headers: Record<string, string> = {
      "Accept-Language": locale,
      Authorization: "Bearer " + token,
    };

    const res = await axios.post(url, data, { headers });
    const result = res?.data?.chat;

    return {
      success: true,
      message: "Offer Accepted Successfully!",
      data: result,
    };
  } catch (error) {
    throw error;
  }
}
