import { PaginationRequest } from "@/types/globals";
import {
  httpDeleteInterceptor,
  httpGet,
  httpPost,
  httpPut,
} from "./http-config/axios-base-service";
import Cookies from "js-cookie";

const token = Cookies.get("access_token");
export async function getListArticle(props: PaginationRequest) {
  const {
    page,
    limit,
    search,
    startDate,
    endDate,
    isPublish,
    category,
    sortBy,
    sort,
    categorySlug,
    isBanner,
  } = props;
  const headers = {
    "content-type": "application/json",
  };
  return await httpGet(
    `/articles?limit=${limit}&page=${page}&isPublish=${
      isPublish === undefined ? "" : isPublish
    }&title=${search}&startDate=${startDate || ""}&endDate=${
      endDate || ""
    }&categoryId=${category || ""}&sortBy=${sortBy || "created_at"}&sort=${
      sort || "asc"
    }&category=${categorySlug || ""}&isBanner=${isBanner || ""}`,
    headers
  );
}

export async function getTopArticles(props: PaginationRequest) {
  const { page, limit, search, startDate, endDate, isPublish, category } =
    props;
  const headers = {
    "content-type": "application/json",
  };
  return await httpGet(
    `/articles?limit=${limit}&page=${page}&isPublish=${
      isPublish === undefined ? "" : isPublish
    }&title=${search}&startDate=${startDate || ""}&endDate=${
      endDate || ""
    }&category=${category || ""}&sortBy=view_count&sort=desc`,
    headers
  );
}

export async function createArticle(data: any) {
  const headers = {
    "content-type": "application/json",
    Authorization: `Bearer ${token}`,
  };
  const pathUrl = `/articles`;
  return await httpPost(pathUrl, headers, data);
}

export async function createArticleSchedule(data: any) {
  const headers = {
    "content-type": "application/json",
    Authorization: `Bearer ${token}`,
  };
  const pathUrl = `/articles/publish-scheduling?id=${data.id}&date=${data.date}`;
  return await httpPost(pathUrl, headers, data);
}

export async function updateArticle(id: string, data: any) {
  const headers = {
    "content-type": "application/json",
  };
  const pathUrl = `/articles/${id}`;
  return await httpPut(pathUrl, headers, data);
}

export async function getArticleById(id: any) {
  const headers = {
    "content-type": "application/json",
  };
  return await httpGet(`/articles/${id}`, headers);
}

export async function deleteArticle(id: string) {
  const headers = {
    "content-type": "application/json",
  };
  return await httpDeleteInterceptor(`articles/${id}`, headers);
}

export async function getArticleByCategory() {
  const headers = {
    "content-type": "application/json",
    Authorization: `Bearer ${token}`,
  };
  return await httpGet(`/article-categories?limit=1000`, headers);
}
export async function getCategoryPagination(data: any) {
  const headers = {
    "content-type": "application/json",
    Authorization: `Bearer ${token}`,
  };

  return await httpGet(
    `/article-categories?limit=${data?.limit}&page=${data?.page}&title=${data?.search}`,
    headers
  );
}

export async function uploadArticleFile(id: string, data: any) {
  const headers = {
    "content-type": "multipart/form-data",
  };
  return await httpPost(`/article-files/${id}`, headers, data);
}
export async function uploadArticleThumbnail(id: string, data: any) {
  const headers = {
    "content-type": "multipart/form-data",
  };
  return await httpPost(`/articles/thumbnail/${id}`, headers, data);
}

export async function deleteArticleFiles(id: number) {
  const headers = {
    "content-type": "multipart/form-data",
  };
  return await httpDeleteInterceptor(`article-files/${id}`, headers);
}

export async function getUserLevelDataStat(startDate: string, endDate: string) {
  const headers = {
    "content-type": "application/json",
    Authorization: `Bearer ${token}`,
  };
  return await httpGet(
    `/articles/statistic/user-levels?startDate=${startDate}&endDate=${endDate}`,
    headers
  );
}
export async function getStatisticMonthly(year: string) {
  const headers = {
    "content-type": "application/json",
    Authorization: `Bearer ${token}`,
  };
  return await httpGet(`/articles/statistic/monthly?year=${year}`, headers);
}
export async function getStatisticMonthlyFeedback(year: string) {
  const headers = {
    "content-type": "application/json",
    Authorization: `Bearer ${token}`,
  };
  return await httpGet(`/feedbacks/statistic/monthly?year=${year}`, headers);
}
export async function getStatisticSummary() {
  const headers = {
    "content-type": "application/json",
    Authorization: `Bearer ${token}`,
  };
  return await httpGet(`/articles/statistic/summary`, headers);
}

export async function submitApproval(data: {
  articleId: number;
  message: string;
  statusId: number;
}) {
  const headers = {
    "content-type": "multipart/form-data",
    Authorization: `Bearer ${token}`,
  };
  return await httpPost(`/article-approvals`, headers, data);
}

export async function updateIsBannerArticle(id: number, status: boolean) {
  const headers = {
    "content-type": "application/json",
  };
  const pathUrl = `/articles/banner/${id}?isBanner=${status}`;
  return await httpPut(pathUrl, headers);
}
