import { getApiToken } from "../config";
import { Bakery, BakeryApi, BakeryApiResponse } from "../definitions/models/Bakery";
import createAxiosInstance from "./axios";

const mapBakery = (data: BakeryApiResponse): Bakery[] => {
  const items = data.data.map(({ id, name, description, location, town, status, images }: BakeryApi) => {
    return {
      description,
      location,
      town,
      status,
      documentId: id,
      name,
      images,
    } as unknown as Bakery;
  });

  return items;
};

const fetchBakeries = async (path: string): Promise<{ bakeries: Bakery[] }> => {
  const ACCESS_TOKEN = getApiToken();
  const axiosStrava = createAxiosInstance(ACCESS_TOKEN);

  const { data } = await axiosStrava.get<BakeryApiResponse>(path);

  const bakery = mapBakery(data);

  return { bakeries: bakery };
};

export const getBakeries = async ({
  fields = "*",
  limit = 10,
  page = 0,
  sort = "name",
}: {
  fields: string;
  limit?: number;
  page?: number;
  sort?: string;
}): Promise<Bakery[]> => {
  try {
    // Crear los filtros para obtener solo las rutas futuras
    const pageQuery = page ? `&page=${page}` : "";

    const filters = [`limit=${limit}`, `sort=${sort}`, pageQuery].join("&");

    const { bakeries } = await fetchBakeries(`/items/bakeries?${filters}&fields=${fields}`);
    return bakeries;
  } catch (error) {
    console.error("Error al obtener las panaderías:", error);
    throw new Error("Error al obtener las panaderías.");
  }
};
