import { passwordObj } from "./../types/PropInterfaces";

import axios from "axios";
import { formatAdField, getToken } from "utilFuncs/utilFunctions";

//ashantimarket
const token = getToken();

export const instance = axios.create({
  baseURL:
    process.env.NODE_ENV === "development"
       ?  "https://api.ashantimarket.com/api/"
       : "https://api.ashantimarket.com/api/",
  headers: {
    Authorization: `Bearer ${token}`,
  },
});

//an axios interceptor to add the token to the header of the request
instance.interceptors.request.use(
  function (config) {
    config.headers.test = "I am only a header!";
    config.headers["Authorization"] = `Bearer ${getToken()}`;
    return config;
  },
  null,
  { synchronous: true }
);

export const testCall = () => {
  return instance.get("v1/ping");
};

//shops
export const createShop = (values: any) => {
  return instance.post(
    "v1/shops",
    {
      name: values.shop_name,
      description: values.description,
      email: values.email,
      phone: values.phone_number,
      picture: "test.jpg",
    }
  );
};

//get my shops
export const fetchMyShops = () => {
  return instance.get("v1/users/my-shops");
};
//get my shops
export const fetchMyShopsAds = ({ queryKey }: any) => {
  return instance.get(`v1/shops/${queryKey[1]}`);
};

//get my shops ads
export const fetchShopAds = ({ queryKey }: any) => {
  console.log("qury key", queryKey[1]);
  return instance.get(`v1/shops/${queryKey[1]}/ads`);
};

//get shop members
export const assignShopMemberRole = ({ queryKey }: any) => {
  return instance.get(`v1/shop-members`);
};

//get my ads,
//queryKey -> array[1] -> username
export const fetchMyAds = ({ queryKey }: any) => {
  return instance.get(`v1/users/${queryKey[1]}`);
};

// export  const userAds = () => {
//   return instance.get('v1/user')
// }

//generic get request
export const gFetchRequest = (url: string) => {
  return instance.get("/api" + url);
};

export const changePassword = (values: passwordObj) => {
  return instance.post(
    "/v1/auth/change-password",
    {
      old_password: values.old_password,
      password: values.password,
      password_confirmation: values.password_confirmation,
    }
  );
};

export const updateUserDetails = (values: any) => {
  return instance.put(
    `/v1/users/${values.username}`,
    {
      ...values,
    }
  );
};

export const storeAd = (values: any) => {
  return instance.post(
    `v1/ads`,
    {
      description: values.description,
      type: values.eggs,
      name: values.name,
      district_id: 8,
      classified_id: values.classified_id,
      classified: values.classified_id,
      redirect_url: "my-ads",
      picture: values.picture,
    }
  );
};

export const fetchShopDetails = (shopName: string) => {
  return instance.get(`v1/shops/${shopName}`);
};

//vlogs
export const fetchHomeVlogs = () => {
  return instance.get("v1/managed-content/home-vlogs");
};

export const fetchVlogs = () => {
  return instance.get("v1/vlogs");
};

export const fetchVlogDetail = (slug: string) => {
  return instance.get(`/v1/vlogs/${slug}`);
};

export const fetchLifestyleCat = () => {
  return instance.get(`/v1/lifestyles`);
};

export const fetchLifeStylePostDetail = (slug: string) => {
  return instance.get(`/v1/lifestyles/single/${slug}`);
};

export const classifiedCategories = () => {
  return instance.get(
    "v2/classifieds?filter[null]=classified_id"
  );
};

export const classifiedCategoriesWithSubcategories = () => {
  return instance.get(
    "/v2/classifieds/?filter[null]=classified_id&include=subclassifieds.subclassifieds"
  );
};

//get only the classifieds
export const classifiedsOnly = () => {
  return instance.get(
    "/v2/classifieds?filter[null]=classified_id&include=subclassifieds.subclassifieds"
  );
};

//get only the classifieds filtered the classified id
export const classifiedById = (classified_id: string) => {
  return instance.get(
    `/v2/classifieds?filter[classified_id]=${classified_id}`
  );
};

//get a classified by id
export const fetchclassifiedByUniqueId = (id: string) => {
  return instance.get(`/v2/classifieds?filter[id]=${id}`);
};

// export const

export const fetchClassifieds = () => {
  return instance.get(
    "/v2/classifieds?include=subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds"
  );
};

export const propertiesSubFields = () => {
  return instance.get(
    `/v2/classifieds/property?include=subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds`
  );
};

export const agricultureSubFields = () => {
  return instance.get(
    `/v2/classifieds/agriculture-pets?include=subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds`
  );
};

export const fetchSubFieldsClient = ({ queryKey }: any) => {
  // const fm = formatAdField(ads_category);
  return instance.get(
    `/v2/classifieds/${queryKey[1]}?include=subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds`
  );
};

export const fetchSubFields = (ads_category: string) => {
  const fm = formatAdField(ads_category);
  return instance.get(
    `/v2/classifieds/${fm}?include=subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds`
  );
};

export const babiesAndKids = () => {
  return instance.get(
    `/v2/classifieds/babies-kids?include=subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds`
  );
};

export const educationAndKids = () => {
  return instance.get(
    `/v2/classifieds/education?include=subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds`
  );
};

export const electronicsSubCats = () => {
  return instance.get(
    `/v2/classifieds/electronics?include=subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds`
  );
};

export const fetchSubCatsForCategory = ({ queryKey }: any) => {
  return instance.get(
    `/v2/classifieds/${queryKey[1]}?include=subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds.subclassifieds`
  );
};

export const login = (values: any) => {
  return instance.post(
    "v1/auth/login",
    {
      ...values,
    }
  );
};

export const fetchUserDetails = ({ queryKey }) => {
  return instance.get(`v1/users/${queryKey[1]}`);
};

export const fetchUser = () => {
  return instance.get("v1/auth/user");
};

export const registerUser = (values: any) => {
  return instance.post("v1/auth/signup", values);
};

export const logoutUser = () => {
  return instance.get("v1/auth/logout");
};

export const fetchDistricts = () => {
  return instance.get("v1/districts");
};

export const ApiGet = (url: string) => {
  return instance.get("/" + url);
};

export const fetchHomepageAds = () => {
  return instance.get("v1/managed-content/home-ads");
};

export const fetchSingleAd = (ad_slug: any) => {
  return instance.get("v1/ads/" + ad_slug);
};

export const searchQuery = (value: any) => {
  
  return instance.get("v1/search/searchQuery/" + value);
};

export const searchUserQuery = (queryKey: any) => {
  
  return instance.get(
    "v1/search/suggestions/" + queryKey[0] + "/" + queryKey[1]
  );
};

export const resultForSearchQuery = ({ queryKey }: any) => {
  console.log("query function", queryKey);
  return instance.get("v2/search?query=" + queryKey[1]);
};

export const fetchAllAds = (page: any = 1) => {
  return instance.get(`v2/ads?page=${page}&include=getClassified,district`);
};

export const fetchAdsForCategory = (
  slug: string,
  classified_id: string | null = null,
  product_type: string | null = null,
  sort_string: string | null = null
) => {
  if (classified_id) {
    return instance.get(
      `v2/ads?include=getClassified,district&&classified_slug=${slug}&filter[getClassified.slug]=${classified_id}`
    );
  } else if (sort_string) {
    return instance.get(
      `v2/ads?include=getClassified,district&&classified_slug=${slug}&sort=${sort_string}`
    );
  } else {
    return instance.get(
      `v2/ads?include=getClassified,district&&classified_slug=${slug}`
    );
  }
};

export const fetchAdsInCategoryGeneral = (slug) => {
  return instance.get(
    `v2/ads?include=getClassified,district&&classified_slug=${slug}`
  );
};

export const fetchAdsByDistrict = (district_slug: string) => {
  return instance.get(
    `v2/ads?include=getClassified,district&filter[district.slug]=${district_slug}`
  );
};

export const fetchAdsByDistrictCategory = (
  district_slug: string,
  category: string
) => {
  return instance.get(
    `v2/ads?include=getClassified,district&filter[district.slug]=${district_slug}&filter[getClassified.name]=${category}`
  );
};

export const fetchLifestyle = () => {
  return instance.get(`v1/lifestyles`);
};

export const specificLifestyle = (slug: string) => {
  return instance.get(`v1/lifestyles/${slug}`);
};
export const directories = () => {
  return instance.get(`v1/directories`);
};

export const fetchSingleDirectory = (directory_slug: string) => {
  return instance.get(`v1/directories/${directory_slug}`);
};

export const fetchSubSingleDirectory = (sub_directory_slug: string) => {
  return instance.get(`v1/subdirectories/${sub_directory_slug}`);
};


export const fetchDirectoryCompany = (company_slug : string) => {
  return instance.get(`v1/directory_listings/${company_slug}`);
}

export const myAds = () => {
  return instance.get(`v1/users/my-ads`);
};

export const fetchAdsEndpoints = () => {
  return instance.get(`v2/search/test_route`);
};

export const deleteItem = (url: string) => {
  return instance.delete(url);
};

export const issueVerificationEmail = () => {
  return instance.post("v1/auth/verify-email");
};

export const actuallyVerifyEmail = () => {
  return instance.post("v1/auth/actually-verify-now");
};

export const verifyTokenValidity = ({ queryKey }: any) => {
  return instance.post(`reset-password/find/${queryKey[1]}`);
};

export const verifyPhoneNumber = (phone_number) => {
  return instance.post("");
};

//forgot password
export const sendPasswordResetRequest = (values) => {
  return instance.post("v1/reset-password/create", {
    ...values,
  });
};

//ad views
export const adViews = () => {
  return instance.get("");
};

//sha
export const fetchShas = ({ queryKey }: any) => {
  return instance.get(`v1/sha/${queryKey[1]}/${queryKey[2]}`);
};

export const fetchServices = () => {
  return instance.get(`v2/ads?filter[classified]=10`);
};

export const fetchAdById = ({ queryKey }: any) => {
  return instance.get(`v1/ads/${queryKey[1]}`);
};

export const createAdNew = (values) => {
  return instance.post("v1/ads", {
    ...values,
  });
};

export const updateAdNewFn = (values) => {
  return instance.put(`v1/ads/${values.adId}`, {
    ...values,
    other_pictures: values.other_pictures.toString(),
  });
};

export const genericGetRequest = (url) => {
  return instance.get(url);
};

export const genericGetRequestQuery = ({ queryVal }: any) => {
  return instance.get(queryVal[1]);
};

export const genericPostRequest = ( values) => {
  return instance.post(values.url, {
    ...values,
  });
};

export const genericDeleteRequest = (url) => {
  return instance.delete(url);
};
